选择查询 C# 查询中条件表达式中的数据类型不匹配错误

Posted

技术标签:

【中文标题】选择查询 C# 查询中条件表达式中的数据类型不匹配错误【英文标题】:Data Type Mismatch error in Criteria expression in Select query C# query 【发布时间】:2015-06-29 08:59:04 【问题描述】:

我的示例代码如下,我收到以下错误;

条件表达式中的数据类型不匹配错误。

Details => ScannerAlarmLimits 是我来自 .mdb 数据库的表。

string jointS = dsetChamberS1.Tables[0].Rows[tot][0].ToString();
int select1S = Convert.ToInt32(jointS);
string sqlQuery1S = "SELECT TMin,TMax,HMin,HMax from ScannerAlarmLimits WHERE ScannerID='" +select1S+ "'";
OleDbCommand cmd1S = new OleDbCommand(sqlQuery1S, conn);
OleDbDataAdapter adapter1S = new OleDbDataAdapter(cmd1S);
adapter1S.Fill(dsetTempS, "ScannerAlarmLimits");

【问题讨论】:

ScannerID 字段的类型是什么,为什么不使用参数化 SQL? ScannerID 是整数.. 很抱歉,我对参数化查询知之甚少。 现在是了解参数化 SQL 的好时机,您的项目成为 SQL 注入攻击的受害者之前... 【参考方案1】:

我刚刚在 where 子句的条件中添加了单引号,现在它可以工作了。

var query = "SELECT * from  checkinout where read <> '1'";

【讨论】:

【参考方案2】:

如果您的ScannerID 列是整数,那么您不应使用单引号。单引号用于字符。喜欢;

WHERE ScannerID = " + select1S;

但作为一种更好的方法,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。又名bobby-tables。

并使用using statement 来处理您的连接、命令和适配器。

string jointS = dsetChamberS1.Tables[0].Rows[tot][0].ToString();
int select1S = Convert.ToInt32(jointS);
using(var conn = new OleDbConnection(conString))
using(var cmd1S = conn.CreateCommand())

    cmd1S.CommandText = "SELECT TMin,TMax,HMin,HMax from ScannerAlarmLimits WHERE ScannerID = @id";
    cmd1S.Parameters.AddWithValue("@id", OleDbType.Integer).Value = select1S;

    using(var adapter1S = new OleDbDataAdapter(cmd1S))
    
        adapter1S.Fill(dsetTempS, "ScannerAlarmLimits");
    

【讨论】:

以上是关于选择查询 C# 查询中条件表达式中的数据类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中条件查询里in、like、及=三个的效率怎么样?

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

Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法

SQL Server - 如何确定select查询中条件的优先级

python 数据库连表查询习题

条件表达式访问中的查询数据类型不匹配