2016-04-03 30 views
1

Veritabanından veriye veri almaya çalışıyorum. Durum SELECT * FROM entries WHERE edate='" & Me.dtpDate.Value.Date & "'"'dir. Ancak enter image description here ölçüt ifadesinde Veri türü uyuşmazlığı hata iletisini alıyorum. Lütfen aşağıdaki kodu inceleyin. Ayrıca hata mesajının ekran görüntüsünü ekledim.Ölçüt ifadesinde veri türü uyuşmazlığı (vb.net, erişim)

Private Sub dtpDate_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtpDate.Leave 
    'GetDayBookOpeningBalance() 
    If Me.lblHeading1.Text <> "Daybook entry" Then 
     Using MyConnection As OleDb.OleDbConnection = FrmCommonCodes.GetConnection(), 
      MyAdapter As New OleDb.OleDbDataAdapter("SELECT * FROM entries WHERE edate='" & Me.dtpDate.Value.Date & "'", MyConnection) 
      'Format(Me.dtpDate.Value.Date, "dd/MM/yyyy")) 
      If MyConnection.State = ConnectionState.Closed Then MyConnection.Open() 
      Using MyDataSet As New DataSet 
       MyAdapter.Fill(MyDataSet, "entries") 
       Me.grdDayBook.DataSource = MyDataSet.Tables("entries") 
       Dim DataSetRowCount As Integer = MyDataSet.Tables("entries").Rows.Count 
       If DataSetRowCount > 0 Then 
        SetGridProperty() 
       Else 
        ShowBlankGrid() 
        FrmCommonCodes.MessageDataNotFound() 
       End If 
      End Using 
     End Using 
    Else 
     ShowBlankGrid() 
    End If 
End Sub 
+1

Bu, parametreli sorgular kullanmadığı için tam olarak ne olabilir. Tablodaki sütun edatının veri türü nedir? Ve eğer bir dize değilse, bir dizeyi neden değer olarak iletiyorsunuz? – Steve

+0

ve onun a tarih alanı –

+1

SQL'de bir tarihin etrafında keneler koyduğunuzda metin olur. Gerçek veri türünü korumak için SQL Parametrelerini kullanın. Eğer onları atacaksanız DataAdapter ve DataSet oluşturmanıza da gerek yoktur. – Plutonix

cevap

3

Bu, parametreli sorgular kullanılmadığında tam olarak ne olabilir.
Bahis sütununuzun Tarih/Saat türünde bir sütun olduğunu ama Me.dtpDate.Value.Date sizin sql dize komutunun geri kalanı ile bitiştireceğini iddia ediyorum.
Bu, DateTime'dan String'e otomatik bir dönüşümü zorlar, ancak dönüştürme, veritabanınızın görmek istediği gibi değildir.

Parametre kullanırsanız, dönüştürme işlemi yoktur ve veritabanı altyapısı tam olarak ne yaptığınızı anlar.

Dim sqlText = "SELECT * FROM entries WHERE [email protected]" 
MyAdapter As New OleDb.OleDbDataAdapter(sqlText, MyConnection) 
MyAdapter.SelectCommand.Parameters.Add("@dt", OleDbType.Date).Value = Me.dtpDate.Value.Date 
.... 
+1

Bir makroya ihtiyacınız var – Plutonix

+0

Steve, Plutonix şimdi çalışıyor .. Gelecekte de yardım isteyeceğim ... çok teşekkür ederim ... (Y) –