[英]ExecuteNonQuery doesn't return results
這是我的(粗略)代碼(DAL):
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
查詢。 根據文件 :
對於UPDATE,INSERT和DELETE語句,返回值是受命令影響的行數。 當插入或更新的表上存在觸發器時,返回值包括插入或更新操作影響的行數以及受觸發器或觸發器影響的行數。 對於所有其他類型的語句,返回值為-1。
每當要執行不應返回值或記錄集的SQL語句時,都應使用ExecuteNonQuery。
因此,如果要運行更新,刪除或插入語句,則應使用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()在執行Insert / Update / Delete時返回-1 。
您將EXECUTENONQUERY()
用於INSERT
, UPDATE
和DELETE
。
但是對於SELECT
你必須使用EXECUTEREADER()
.........
你能發布確切的查詢嗎? ExecuteNonQuery
方法返回@@ROWCOUNT
Sql Server變量,執行最后一個查詢后的執行內容是ExecuteNonQuery
方法返回的內容。
如果你想要的只是從查詢中獲得一個整數,請使用:
myCmdObject.ExecuteScalar()
ExecuteNonQuery
方法用於非查詢的SQL語句,例如INSERT
, UPDATE
,......如果希望語句返回結果(即查詢),則需要使用ExecuteScalar
或ExecuteReader
。
從MSDN: SqlCommand.ExecuteNonQuery方法
您可以使用ExecuteNonQuery執行目錄操作(例如,查詢數據庫的結構或創建數據庫對象,例如表),或者通過執行UPDATE,INSERT或DELETE語句來更改數據庫中的數據而不使用DataSet。
雖然ExecuteNonQuery不返回任何行,但是映射到參數的任何輸出參數或返回值都會填充數據。
對於UPDATE,INSERT和DELETE語句,返回值是受命令影響的行數。 當插入或更新的表上存在觸發器時,返回值包括插入或更新操作影響的行數以及受觸發器或觸發器影響的行數。 對於所有其他類型的語句,返回值為-1 。 如果發生回滾,則返回值也為-1。
您正在使用SELECT查詢,因此您獲得-1
如果要運行更新,刪除或插入語句,則應使用ExecuteNonQuery。 ExecuteNonQuery返回受語句影響的行數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.