先前cloudio有一個需求,就是送出sqlcommand後取得影響的筆數
就像這張照片的訊息那欄
先前cloudio有一個需求,就是送出sqlcommand後取得影響的筆數
就像這張照片的訊息那欄
因為ExecuteNonQuery要是傳回變更的資料數量所以select的話是抓不到的...
今天看書看到一個sqlcommand有一個功能可以使用
就來寫看看囉
private static void StatementCompleted() {
using (SqlConnection _conn = new SqlConnection(GetConnection())) {
_conn.Open();
SqlCommand _cmd = new SqlCommand("SELECT * FROM ORDERS", _conn);
_cmd.StatementCompleted += new StatementCompletedEventHandler(_cmd_StatementCompleted);
_cmd.ExecuteNonQuery();
}
}
static void _cmd_StatementCompleted(object sender, StatementCompletedEventArgs e) {
Console.WriteLine(e.RecordCount);
}
重點就是StatementCompleted事件
由當 Transact-SQL 陳述式執行完畢時發生此句可以知道update、select、delete等等都會讓它有反應(事件)的
然後再到那個處理這反應(事件)的method中去捕捉StatementCompletedEventArgs的RecordCount就可以知道影響的筆數囉:)
剛38大提供一個用output參數的方法,不過應該是要寫Store Procedure
cloudio做一個超簡單範例,先來建立Procedure
create procedure getValueAndRowCount
@rowcount int OUTPUT
as
select * from orders
select @rowcount = @@rowcount
go
再這樣寫:
using (SqlConnection _conn = new SqlConnection(GetConnection())) {
_conn.Open();
SqlCommand _cmd = new SqlCommand("getValueAndRowCount", _conn);
_cmd.CommandType = CommandType.StoredProcedure;
_cmd.Parameters.Add(new SqlParameter("@rowcount", DbType.Int16));
_cmd.Parameters["@rowcount"].Direction = ParameterDirection.Output;
_cmd.ExecuteNonQuery();
Console.WriteLine(_cmd.Parameters["@rowcount"].Value);
}
這次的重點就是@@ROWCOUNT囉,相關資料可以到MSDN @@ROWCOUNT找