【问题标题】:Data Type Mismatch in criteria expression in vb.net with access 2010访问 2010 的 vb.net 中的条件表达式中的数据类型不匹配
【发布时间】:2014-10-15 05:43:08
【问题描述】:
 Dim QRY As String = "SELECT t1.Observer_Name,t1.Company, t2.Safety, t2.T_Name, t2.Trainer_Name," _
                               + "t2.T_Location, t2.T_Start, t2.T_End,(DateDiff(""d"",T_Start, T_End)+1)*8 as [Man_Hours], t2.Remarks" _
                               + " FROM ObserverDetails t1,Training t2,TrainningAttendee t3" _
                               + " WHERE t2.T_ID=t3.T_ID AND t3.Ob_ID=t1.Observer_ID And  t2.T_Start >= @dt1 AND t2.T_Start <= @dt2 "
        cmdSelect.CommandText = QRY
        cmdSelect.Parameters.Add("@dt1", OleDb.OleDbType.Char).Value = DateTimePicker1.Text.Trim
        cmdSelect.Parameters.Add("@dt2", OleDb.OleDbType.Char).Value = DateTimePicker2.Text.Trim
        cmdSelect.CommandType = CommandType.Text
        cmdSelect.Connection = reportConnection4

        reader1 = cmdSelect.ExecuteReader
        If reader1.Read Then
            While reader1.Read
                Dim row As String() = New String() {" " & reader1.Item("Observer_Name") & " ", "" & reader1.Item("Company") & "", " " & reader1.Item("Safety") & " ", " " & reader1.Item("T_Name") & "", _
                                                   "" & reader1.Item("Trainer_Name") & " ", " " & reader1.Item("T_Location") & "", "" & reader1.Item("T_Start") & "", _
                                                   "" & reader1.Item("T_End") & " ", "" & reader1.Item("Man_Hours") & " ", "" & reader1.Item("Remarks") & " "}
                DataGridView1.Rows.Add(row)
            End While
        End If

给我错误 在 reader = cmdSelect.ExecuteReader 错误是标准表达式中的数据类型不匹配。

【问题讨论】:

  • 相关部分在哪里,即reader1的声明?
  • 您似乎将日期评估为文本...这可能不会很好地结束。如果T_Start 是一个日期列,可以解释数据与传递的文本不匹配。
  • 是的,它是在 Public Sub 的开头声明的
  • 在您的数据库中,字段 T_Start 的数据类型是什么?
  • 这个逻辑适用于不同形式的@Plutonix

标签: .net database vb.net types mismatch


【解决方案1】:

如果您的命令是System.Data.OleDb.OleDbCommand,那么您的阅读器必须是System.Data.OleDb.OleDbDataReader 或其基本类型(DbDataReaderIDataReader)。

Dim reader1 As OleDbDataReader

或隐含

Dim reader1 = cmdSelect.ExecuteReader()

您可以使用AddWithValue 来自动获得具有正确类型的参数。如果您的数据库类型是日期/时间,则将日期作为Date 传递,而不是作为字符串传递(正如其他人在 cmets 中所说的那样)。

cmdSelect.Parameters.AddWithValue("@dt1", DateTimePicker1.Value)

字符串的问题是(除了数据类型不匹配之外)日期的文本表示总是依赖于用于格式化的文化。如果数据库假设另一种文化,那么事情可能会出错美国 5/7/2014 (m/d/yyyy) 与英国 5/7/2014 (d/m/yyyy) 不同!

【讨论】:

  • 仅其 OleDbDataReader
  • System.Data.OleDb 是您可能已导入的命名空间,因此未在 Dim 语句中指定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2017-01-14
  • 1970-01-01
相关资源
最近更新 更多