OledbException条件表达式中的数据类型不匹配

时间:2011-06-16 16:12:41

标签: sql vb.net type-mismatch

我在OledbException Data type mismatch in the criteria expression获得ad.Fill(xDataset, "TblMaster")

我正在使用Access数据库和Telerik Reporting。

这是我的代码

Public Sub TanggalX()

    conn.Open()

    Dim str9 As String = "Select * From TblMaster Where Tanggal='" & Me.DateTimePicker1.Value.Date.ToString("yyyy/MM/dd")) & "'"
    ad = New OleDb.OleDbDataAdapter(str9, conn)
    xDataset.Clear()
    ad.Fill(xDataset, "TblMaster")
    obj_RepDoc = New Report1
    obj_RepDoc.DataSource = (xDataset)
    Me.ReportViewer1.Report = obj_RepDoc
    Me.ReportViewer1.RefreshReport()
    Me.Show()
    conn.Close()
End Sub

请帮助我,这是我这个项目的最后一个问题。

3 个答案:

答案 0 :(得分:3)

您应该使用#代替'日期/时间字段。

 Dim str9 As String = "SELECT * FROM TblMaster WHERE Tanggal=#" & Me.DateTimePicker1.Value.Date.ToString("yyyy/MM/dd")) & "#"

答案 1 :(得分:1)

我的猜测是TblMaster.Tangall的类型为Date,您在string select命令的WHERE子句中将其指定为SQL

尝试以下方法:

using (OleDbCommand comm = new OleDbCommand())
{
    var parameter =comm.Parameters.AddWithValue("@tangall", Me.DateTimePicker1.Value);
    parameter.OleDbType = OleDbType.DBDate;

        using (var ad = new OleDbDataAdapter(comm))
        {
            ... //do your stuff here
        }
}

答案 2 :(得分:0)

我认为InBetween是对的。您还可以通过将SQL语句替换为:

,将字符串转换为SQL语句中的日期而不是使用参数
Dim str9 As String = "Select * From TblMaster Where Tanggal=CDate('" & Me.DateTimePicker1.Value.ToString() & "')"