[英]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_createtime
是datetime
數據類型
操作數數據類型 nvarchar 對減號運算符無效
有人可以讓我知道我哪里出錯了謝謝
在@DaleK 的評論的幫助下,我解決了這個問題,替換了代碼
command.Parameters.AddWithValue("minutesBack", minutesBack);
用這件作品
command.Parameters.Add("minutesBack", SqlDbType.Int).Value = minutesBack;
傳遞參數的一種好方法是明確提及 sql 數據類型以避免此類數據類型問題。 有關更多詳細信息,請點擊鏈接AddWithValue vs Add 。
所以我將我的參數作為數字而不是字符串傳遞,也很好地理解了try-catch
, using
語句。 好好學習,謝謝大家的貢獻。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.