簡體   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