這是我的(粗糙)碼(DAL):的ExecuteNonQuery()
int i;
// Some other declarations
SqlCommand myCmdObject = new SqlCommand("some query");
conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();
的問題是:即使有存在於我的SELECT
查詢的記錄,在i
值保持-1
。
可能是什麼問題?
這是我的(粗糙)碼(DAL):的ExecuteNonQuery()
int i;
// Some other declarations
SqlCommand myCmdObject = new SqlCommand("some query");
conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();
的問題是:即使有存在於我的SELECT
查詢的記錄,在i
值保持-1
。
可能是什麼問題?
你進行什麼類型的查詢?使用ExecuteNonQuery
打算用於UPDATE
,INSERT
和DELETE
查詢。按照the documentation:
對於UPDATE,INSERT和DELETE 語句,返回值是 數受 命令行。當 表正被插入或更新時, 返回值包括受插入或 更新操作以及受觸發器或觸發器影響的 行數受影響的 行的數量。對於所有其他類型的 語句,返回值爲-1。
你能發表確切的查詢嗎? ExecuteNonQuery
方法返回@@ROWCOUNT
Sql Server變量,它在最後一個查詢執行後什麼是ExecuteNonQuery
方法返回的。
如果你想要的是從查詢得到的只是一個整數,使用:
myCmdObject.ExecuteScalar()
的ExecuteScalar將只返回價值是在執行查詢的第一行的第一列的值。 – 2011-03-18 07:25:32
這是事實,但正如我所說的選擇一個整數時,它應該是在第一行:) – IordanTanev 2011-03-18 07:27:52
的ExecuteNonQuery
方法用於SQL語句,這些語句不查詢,如INSERT
,UPDATE
,......你想,如果你希望你的語句返回結果使用ExecuteScalar
或ExecuteReader
(即查詢) 。
從MSDN:SqlCommand.ExecuteNonQuery Method
可以使用ExecuteNonQuery到 執行目錄操作( 例如,查詢 數據庫的結構或創建數據庫對象 作爲表,例如),或改變數據 通過執行UPDATE,INSERT或DELETE 語句而不使用DataSet 。
雖然爲ExecuteNonQuery返回 沒有行,任何輸出參數或映射到參數 返回值 用數據填充。
對於UPDATE,INSERT和DELETE 語句,返回值是 命令影響的行數。當 表正被插入或更新時, 返回值包括受插入或 更新操作以及受觸發器或觸發器影響的 行數受影響的 行的數量。對於所有其他類型的 語句,返回值爲-1。如果 發生回滾,則返回值爲 也是-1。
您使用SELECT查詢,這樣你會得到-1
,如果你想運行更新,刪除, 或insert語句,你應該使用 爲ExecuteNonQuery。 ExecuteNonQuery 返回受 該語句影響的行數。
您使用EXECUTENONQUERY()
爲INSERT
,UPDATE
和DELETE
。
但SELECT
必須使用EXECUTEREADER()
.........
每當要執行的SQL語句不應該返回一個值或一個記錄集,爲ExecuteNonQuery應該被使用。
所以,如果你想運行一個update,delete或insert語句,你應該使用ExecuteNonQuery。 ExecuteNonQuery返回該語句影響的行數。這聽起來很不錯,但是無論何時使用SQL Server 2005 IDE或Visual Studio創建存儲過程,它都會添加一條破壞所有內容的小行。
即行是:SET NOCOUNT ON;此行打開SQL Server的NOCOUNT功能,該功能「停止指示被作爲結果一部分返回的Transact-SQL語句影響的行數」消息,因此它會使存儲過程始終返回-1從應用程序調用(在我的情況下是一個Web應用程序)。
總之,從您的存儲過程中刪除了這一行,你現在會得到指示受該語句影響的行數的值。
快樂編程!
由於SET NOCOUNT選項設置爲on。刪除「SET NOCOUNT ON;」一行在你的查詢或存儲過程中。
查看更多在SqlCommand.ExecuteNonQuery() returns -1 when doing Insert/Update/Delete。
的第一列是什麼返回值,如果我們運行一個StoredProcedure的,這將在插入或更新或刪除記錄表, – Raghuveer 2012-05-31 10:29:49