Member 13868947 Ответов: 1

Получить предупреждение от виртуального столбца в datagridview


Я создал форму с данными из базы данных acces с некоторыми полями, и в одном из них есть поле date, как отобразить в datagrid с критерием даты поля менее 30 дней от текущей даты

Что я уже пробовал:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      'DataGridView2.DataSource.clear()

      Try
          If con.State = ConnectionState.Closed Then
              con.Open()
          End If
          sql = "Select *, datediff('d',Date(),thmasuk )as kurang from tpegawai"
          'sql = "select count(nip) as Expired from Tpegawai where datediff('d', Date(), thmasuk) and datediff('d', Date(), thmasuk)  & Text1.Text
          da = New OleDb.OleDbDataAdapter(sql, con)
          da.Fill(ds, "dbpegawai")
          con.Close()
          '  If IsNumeric(Text1.Text) And Text1.Text <> 0 Then
          ' add the limitation of date
          ' sql = sql & " where datediff('d', Date(), thmasuk) < " & Text1.Text
          ' End If
          '    sort by remaining date
          'sql = sql & " order by datediff('d', Date(), thmasuk) asc"
      Catch ex As Exception
          MessageBox.Show(ex.ToString)
      End Try
      DataGridView2.DataSource = ds.Tables("dbpegawai")

  End Sub

1 Ответов

Рейтинг:
0

Maciej Los

Прежде всего, вам следует избегать SqlInjection[^] путем создания параметризованных запросов.

Предполагая, что вы хотите отобразить данные, соответствующие диапазону дат, определяемому пользователем (Text1.Text), вы можете попробовать что-то вроде этого:

sql = String.Format("SELECT <Field_List> {0} FROM Tpegawai {0} WHERE DateDiff('d', Date(), thmasuk)<=?", Environment.NewLine)
con.Open()
Dim dt As DataTable = New DataTable()
Using command As OleDbCommand = New OleDbCommand(sql, con)
    command.Parameters.Add(Me.Text1.Text)
    Dim oRdr As OleDbDataReader = command.ExecuteNonQuery()
    dt.Load(oRdr)
    oRdr.Dispose()
    command.Dispose()
End Using
con.Close()
'dt holds data; you can bind it with DataGridView.DataSource
DataGridView1.DataSource1 = dt


Для получения более подробной информации, пожалуйста, смотрите:
Объект oledbcommand.Свойство Параметров (System.Data.Для oledb)[^]