2013-05-01 2 views
0

Я пытаюсь прочитать данные из базы данных доступа с определенной датой в представлении datagrid в VB.NET. Для этого я использую сборщик данных. Ниже код, который я использовал для получения данных. Но я нажимаю кнопку поиска. ничего не отображается в представлении datagrid. это кодИзвлечение данных из базы данных доступа в представление сетки данных в vb.net

Private Sub BTNFIND_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNFIND.Click 
    ATCEDITGRID.Rows.Clear() 
    getConnect() 
    'Dim editdate As String 
    DTPEDITAT.Value = Format(DTPEDITAT.Value, "dd/MM/yyyy") 
    'MessageBox.Show(DTPEDITAT.Value) 
    'editdate = DTPEDITAT.Value 
    Try 
     Conn.Open() 
     Dim strSQL As String = "SELECT EMP_ID,EMP_NAME,AT_STATUS,AT_REMARK FROM ATTENDANCE WHERE AT_DATE = " & DTPEDITAT.Value & " ORDER BY EMP_NAME ASC" 
     Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(strSQL, Conn) 
     Dim ds As DataSet = New DataSet 
     da.Fill(ds, "ATTENDANCE") 
     Dim dt As DataTable = ds.Tables("ATTENDANCE") 
     Dim row As DataRow 
     Dim atstat As String 
     For Each row In dt.Rows 
      If row("AT_STATUS") = 1 Then 
       atstat = "Present" 
      ElseIf row("AT_STATUS") = 0 Then 
       atstat = "Absent" 
      ElseIf row("AT_STATUS") = 0.5 Then 
       atstat = "Halfday" 
      Else 
       atstat = "Error" 
      End If 
      'MessageBox.Show(row("EMP_ID")) 
      'MessageBox.Show(row("EMP_NAME")) 
      'MessageBox.Show(atstat) 
      'MessageBox.Show(row("AT_REMARK")) 
      Me.ATCEDITGRID.Rows.Add(row("EMP_ID")) 
      Me.ATCEDITGRID.Rows.Add(row("EMP_NAME")) 
      Me.ATCEDITGRID.Rows.Add(atstat) 
      Me.ATCEDITGRID.Rows.Add(row("AT_REMARK")) 
     Next row 
     ATCEDITGRID.TopLeftHeaderCell.Value = "Sr.No." 
     Me.ATCEDITGRID.RowHeadersDefaultCellStyle.Padding = New Padding(3) 
     ATCEDITGRID.AllowUserToAddRows = False 
     AddRowHeadersEdit() 
     Conn.Close() 
    Catch ex As OleDb.OleDbException 
     MsgBox(ex.Message, MsgBoxStyle.Critical, "DB Error") 
    Catch ex As Exception 
     MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error") 
    End Try 
End Sub 

, пожалуйста, проверьте код. и дайте мне решение

ответ

1

Когда вы создаете команду, соединяющую строки sql, вы подвергаете свой код двум большим проблемам.

  • Во-первых, вы можете написать неправильный синтаксис для конкретного типа данных на конкретной базе данных
  • Во-вторых, вы подвергаете свой код для атак Sql инжекции из злоумышленником (ну, здесь не должно быть проблемой, но ....)

Вместо создания параметризованного запроса и пусть рамки код взаимодействия с ядром базы данных в безопасном и правильном пути

Таким образом, вы должны написать:

Теперь, глядя на ваш код, у вас может возникнуть другая потенциальная ошибка в том, как вы обрабатываете значение поля AT_STATUS. Из вашего кода кажется, что поле имеет тип десятичный или двойной. Если ваш код компилируется, вы, вероятно, установили OPTION STRICT в положение OFF. Лучше использовать эту опцию и преобразовывать соответствующие типы данных

Dim dt As DataTable = ds.Tables("ATTENDANCE") 
    Dim row As DataRow 
    Dim atstat As String 
    Dim status as Decimal 

    For Each row In dt.Rows 
     status = Convert.ToDecimal(row("AT_STATUS")) 
     If status = 1 Then 
      atstat = "Present" 
     ElseIf status = 0 Then 
      atstat = "Absent" 
     ElseIf status = 0.5 Then 
      atstat = "Halfday" 
     Else 
      atstat = "Error" 
     End If 
     ...... 
    Next row 
+0

@ Steve-thnx для вашего взвешенного воспроизведения .. – Thanzeem

Смежные вопросы