簡體   English   中英

C# SqlCommand.ExecuteNonQuery 為成功的 UPDATE SQL 語句返回 -1

[英]C# SqlCommand.ExecuteNonQuery returning -1 for successful UPDATE SQL statement

使用.ExecuteNonQuery的以下代碼似乎有效:

public static void StringQueryWithParameterList(
    string queryString,
    List<string> keys,
    List<string> values
)
{
    SqlCommand command = new SqlCommand(queryString);
    int affected;

    command.Connection = GetConnection();
    command.CommandType = CommandType.Text;
    for (int i = 0; i < keys.Count; i++) {
        command.Parameters.AddWithValue(keys[i], values[i]);
    }
    affected = command.ExecuteNonQuery();  // Note: this is returning -1 ... why?

    if (affected < 1)
    {
        throw new Exception("No rows were updated by this update query.");
    }
}

.ExecuteNonQuery返回-1的原因我不明白。 我觀察到此功能確實有效,當我簽入 SQL Server Management Studio 時,數據庫正在按預期更新。 顯然,我想使用我期望從.ExecuteNonQuery獲得的返回值來驗證行是否已成功更改,但這不起作用。

我調查了.ExecuteNonQuery的 MSDN 文檔( 這里)。 文檔報告在以下情況下預期結果為-1

  • 對於UPDATE、INSERT 和 DELETE以外的所有 SQL 語句類型(但我的是 UPDATE)
  • 如果沒有檢測到有助於計數的語句(但我看到數據庫按預期更新,所以這對我來說沒有意義)
  • 如果發生回滾(顯然不是,因為我在數據庫中看到了我的更改)

為了透明起見,這是我正在使用的查詢:

UPDATE my_table SET my_col = 2 WHERE my_id = 'some_id';

SET NOCOUNT可能在實例級別處於ON狀態。

要檢查它,您可以使用DBCC USEROPTIONS;

為了SET NOCOUNT OFF ,您可以

sp_configure 'user options' 0

PS: AddWithValue(keys[i], values[i])不是類型安全的。 我不建議使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM