繁体   English   中英

如何解决操作数数据类型 nvarchar 对减号运算符无效

[英]How to resolve operand data type nvarchar is invalid for minus operator

我有一个 SQL 查询,它试图获取过去一小时内创建的所有记录

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";
string minutesBack = "60"; //set by another function but for eg sake I've hardcoded the  value
SqlCommand command = new SqlCommand(query);
command.Parameters.AddWithValue("minutesBack", minutesBack);
DataSet ds = RunQuery(command, tablename);

我正在使用以下代码执行

private DataSet RunQuery(SqlCommand command, String tablename)
{
    DataSet ds = null;
    SqlDataAdapter adapter = null;
    using (SqlConnection oc = new SqlConnection(CONNECTIONSTRING))
    {
        try
        {
            oc.Open();
            command.CommandType = CommandType.Text;
            command.Connection = oc;
            adapter = new SqlDataAdapter(command);
            ds = new DataSet();
            adapter.Fill(ds, tablename);
        }
        catch
        {
            if (ds != null)
            {
                ds.Dispose();
            }
        }
        finally
        {
            if (oc != null)
            {
                oc.Close();
                oc.Dispose();
            }
        }
    }
    return ds;
}

当我尝试执行此代码时,出现以下错误,但mcl_createtimedatetime数据类型

操作数数据类型 nvarchar 对减号运算符无效

有人可以让我知道我哪里出错了谢谢

在@DaleK 的评论的帮助下,我解决了这个问题,替换了代码

command.Parameters.AddWithValue("minutesBack", minutesBack);

用这件作品

command.Parameters.Add("minutesBack", SqlDbType.Int).Value = minutesBack;

传递参数的一种好方法是明确提及 sql 数据类型以避免此类数据类型问题。 有关更多详细信息,请点击链接AddWithValue vs Add

所以我将我的参数作为数字而不是字符串传递,也很好地理解了try-catchusing语句。 好好学习,谢谢大家的贡献。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM