从 Sql VB.NET System.Data.OleDb.OleDbException 检索 "Number":'Data type mismatch in criteria expression.'

Retrieving "Number" From Sql VB.NET System.Data.OleDb.OleDbException: 'Data type mismatch in criteria expression.'

如果我想检索在访问数据库中保存为数字的值。

我正在使用以下内容:

            Dim sql As String = "SELECT ArithmeticScore FROM " & tablename & " WHERE DateAscending = '" & todaysdate & "'"
            Using connection As New OleDbConnection(getconn)
                Using command As New OleDbCommand(sql, connection)
                    connection.Open()
                    scorevalue = CDec(command.ExecuteScalar()) 'Data type mismatch in criteria expression.
                    connection.Close()
                End Using
            End Using
            MsgBox(scorevalue)

getconn = 连接字符串作为字符串

scorevalue = 没有十进制

字段 ArithmeticScore 在 table 中设置为 Number

现在单元格中的确切值是 50,但程序应该允许任何小数值。

我收到的错误是 "Data type mismatch in criteria expression"。

错误信息中提到的criteria expression并不是指ArithmeticScore的输出。它在谈论 WHERE 子句。 todaysdate 的内容与数据库对 DateAscending 列的期望不匹配。

由于 OleDb 是一个通用的提供程序,我们不知道您正在使用哪种数据库,但是大多数数据库都有办法在 SQL 中获取当前日期值:getdate(), current_timestamp, 等。使用该机制可能会解决冲突,并且首先不需要为此使用字符串连接。

Dim sql As String = "SELECT ArithmeticScore FROM " & tablename & " WHERE DateAscending = Date()"

解决此问题的另一种方法是使用适当的参数化查询,无论如何您都应该这样做。 从不 可以使用字符串连接将数据替换为 SQL 查询,如果您发现自己需要考虑如何格式化日期或数字字符串以用于SQL命令,你几乎总是做错事。