我在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
请帮助我,这是我这个项目的最后一个问题。
答案 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() & "')"