【发布时间】:2022-01-07 19:32:38
【问题描述】:
我有一个 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_createtime 是 datetime 数据类型
操作数数据类型 nvarchar 对减号运算符无效
谁能告诉我我哪里出错了 谢谢
【问题讨论】:
-
-@minutesBack- 您将此参数作为字符串而不是数字传递。也强烈建议不要使用AddWithValue -
@DaleK 你能告诉我如何将此参数作为数字传递吗? AddWithValue 的最佳替代方法是什么?
-
@m_beta 在 Dale 刚刚给你的链接中有一个关于如何做到这一点的例子。在链接中,在他们描述了
AddWithValue的问题后,他们会告诉您替代方案。是的,我避免告诉你函数的确切名称,这样你就可以获得链接的有用信息,并且不仅知道你应该使用什么函数,而且知道你为什么要这样做。 -
using() 语句的重点是,您不必编写代码来捕获异常并手动处理
-
@Cleptus:数据集不需要 dispose:stackoverflow.com/questions/913228/…。我经常使用 ADO.NET 编写代码。
标签: c# sql sql-server