C# C中OLEDB命令上的ExecuteScalar强制转换#

C# C中OLEDB命令上的ExecuteScalar强制转换#,c#,sql,oledbcommand,executescalar,C#,Sql,Oledbcommand,Executescalar,我从我的代码中收到以下错误: 出现以下错误: System.Data.OleDb.OLEDBEException(0x80040E07):条件表达式中的数据类型不匹配。 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)中 位于System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbPa

我从我的代码中收到以下错误:

出现以下错误:

System.Data.OleDb.OLEDBEException(0x80040E07):条件表达式中的数据类型不匹配。 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)中 位于System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&ExecuteSult) 在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&ExecuteSult)中 位于System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior,Object&executeResult) 位于System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior,String方法) 在System.Data.OleDb.OleDbCommand.ExecuteScalar()中 在C:\Path\Form1.cs中的NJDataExtractExceltoAccess.Form1.FindActId(字符串x,OleDbConnection y)处:第158行

Microsoft页面上说:

典型的ExecuteScalar查询的格式如下C#示例所示:

我也尝试过:

int result = (int)cmd.ExecuteScalar();


但我在同一行收到相同的数据类型错误。如何从
OleDbCommand
对象上的
ExecuteScalar()
强制转换(连接和插入字符串起作用)?

错误与
ExecuteScalar
结果的强制转换无关。这是sql
where
子句中的错误:

  • 您必须检查
    where
    条件中使用的字段类型。字符串字段(varchar)的值应该用单引号括起来,数字列的值不应该用单引号括起来

  • 字段值与
    和连接到下一个条件的
    之间缺少空格


  • 除了应该使用参数化查询()之外,您的所有列都是数字吗?如果它们是varchar,则需要在每个字符串前后加上单引号。每个“And ColXXX=”字符串段的开头都缺少空格,因此最终的查询可能格式不正确,即“And Col2=1 And Col3=2 And Col4=…”等
    cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
    Int32 count = (Int32) cmd.ExecuteScalar();
    
    int result = (int)cmd.ExecuteScalar();
    
    object result = cmd.ExecuteScalar();