首先,爲了清楚起見,我認識到ExecuteNonQuery
只應用於UPDATE, INSERT, or DELETE
語句,對於所有其他類型的語句(如SELECT),返回值爲-1。瞭解ExecuteNonQuery的返回值
我的問題是,爲什麼下面的存儲過程:
CREATE PROCEDURE `ExampleProc`(IN Name varchar(60), OUT ID bigint(20), OUT SP varchar(255))
BEGIN
SELECT id, sp INTO ID, SP FROM users WHERE username = Name;
END
當使用ExecuteNonQuery
執行:
using (var conn = new MySqlConnection("Secret"))
{
conn.Open();
using (var cmd = new MySqlCommand("ExampleProc", conn) { CommandType = CommandType.StoredProcedure })
{
cmd.Parameters.AddWithValue("Name", request.Name).MySqlDbType = MySqlDbType.VarChar;
cmd.Parameters.Add("ID", MySqlDbType.Int64).Direction = ParameterDirection.Output;
cmd.Parameters.Add("SP", MySqlDbType.VarChar).Direction = ParameterDirection.Output;
var returnVal = cmd.ExecuteNonQuery();
}
}
產生0 in returnVal
時名稱行沒有找到,並且1
如果找到了?根據我已閱讀的所有文檔,由於存儲過程包含single SELECT statement
,因此無論如何我都應該看到-1
被返回。相反,它會返回受影響/找到的行數,根據文檔,這是沒有意義的。
最後,我也試過只用"SELECT *" instead of "SELECT id, sp INTO ID, SP"
。這似乎總是返回0
。仍然不是我期待的-1
。
檢查鏈接 https://msdn.microsoft.com/en-in/library/ms188774.aspx 對於Select語句嘗試設置'Set RowCount'並測試。另外請注意你提到的行爲是針對Sql Server的,對於不同的數據庫可能表現不同 –