sqlcommand影響筆數

先前cloudio有一個需求,就是送出sqlcommand後取得影響的筆數

就像這張照片的訊息那欄

先前cloudio有一個需求,就是送出sqlcommand後取得影響的筆數

就像這張照片的訊息那欄

2008-12-29 PM 09-02-47

因為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事件

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