SQL报错operand data type nvarchar is invalid for minus operator如何解决
问题原因
你的参数@minutesBack传入了字符串类型值,导致SQL执行时类型不匹配,该报错和mcl_createtime字段的datetime类型无关。
你在代码中将minutesBack定义为string类型:
string minutesBack = "60";
调用AddWithValue时,ADO.NET会根据传入值的类型自动推断SQL参数类型,这里会把@minutesBack识别为nvarchar类型。SQL语句中-@minutesBack的减号运算不能作用于字符串类型,因此抛出报错:
operand data type nvarchar is invalid for minus operator
修复方法
- 将
minutesBack的变量类型改为数值类型int - 建议显式指定SQL参数类型,避免
AddWithValue自动推断带来的类型不匹配隐患
修改后的查询代码如下:
string query = "select * from Monarchchangelog mcl WHERE LOWER(mcl.mcl_usercomment) LIKE 'bolt%' AND mcl.mcl_createtime > DATEADD(MINUTE, -@minutesBack, GETDATE()) ORDER BY mcl.mcl_createtime DESC"; string tablename = "NEW_UPDATES"; // 改为int类型存储数值 int minutesBack = 60; SqlCommand command = new SqlCommand(query); // 显式指定参数类型为Int command.Parameters.Add("@minutesBack", SqlDbType.Int).Value = minutesBack; DataSet ds = RunQuery(command, tablename);
可选优化
你写的RunQuery方法中,SqlConnection已经被包裹在using块中,离开作用域时会自动释放连接、关闭连接,finally块中手动关闭、释放连接的逻辑是冗余的,可以直接删除。
内容的提问来源于stack exchange,提问作者m_beta
相关产品推荐
相关产品推荐

