【问题标题】:VB.NEt - Data type mismatch in criteria expressionVB.NEt - 标准表达式中的数据类型不匹配
【发布时间】:2016-08-09 10:24:21
【问题描述】:

我收到一条错误消息,提示“条件表达式中的数据类型不匹配”

    Dim Conn As OleDbConnection = New OleDbConnection
    Dim provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="  
    Dim dataFile = "E:\TME Review\TME Review Database.accdb"
    Conn.ConnectionString = provider & dataFile 
    Conn.Open()  
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Monthly where [Date Ended]= '" + TextBox3.Text + "'", Conn)  
    Dim dr As OleDbDataReader = cmd.ExecuteReader 

[Date Ended] 数据类型为文本,textbox3 的内容为字符串值。我仔细检查了一遍。知道为什么我会收到错误数据类型不匹配吗?提前致谢

【问题讨论】:

  • 尝试将 + 改为 &。
  • 你传递的日期错误...
  • 我把日期弄错了?你能解释一下吗?
  • # 包裹您的日期并使用- 代替斜线。
  • 如果是日期类型,请使用日期类型而不是字符串!

标签: vb.net


【解决方案1】:

检查文本框中输入的值。在这种使用日期字段过滤记录的情况下,最好先检查文本框中的值是否为有效日期,然后再将其用于 OleDBCommand。

Dim cmd As OleDbCommand= Nothing
If IsDate(TextBox3.Text)= True Then
    cmd= New OleDbCommand("SELECT * FROM Monthly where [Date Ended]= '" + TextBox3.Text + "'", Conn)
End If

【讨论】:

  • 文本框中输入的值是一个字符串值,是手动输入的(ex. Aug/2016)
  • 2016 年 8 月不是有效日期。如果可能,我建议您为此使用 datetimepicker。
【解决方案2】:

在 VB 中,要连接字符串,您必须使用“&”而不是“+”。

编辑

如果所有数据都是字符串,那就是正确答案... 但是,如果您的 DATE 设置为“2009 年 12 月 5 日”,则必须将其括起来 #,例如:

  where [End Date] = '#12/05/2009#'

【讨论】:

  • 这不是解决方案,也不是正确的错误。
  • 但我并没有尝试连接字符串,而是在数据库中搜索具有所选/输入日期的数据。
  • Marceline,你确定你的数据库字段是字符串格式的吗?
  • 是的,如果你愿意,我可以截图。
猜你喜欢
  • 1970-01-01
  • 2021-11-09
  • 2013-12-23
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多