私は現在C#プロジェクトに取り組んでいますが、同時に選択も行う挿入クエリを実行しています、例えば:
INSERT INTO table (SELECT * FROM table WHERE column=date)
このクエリ中に挿入された行数を確認する方法はありますか?
ExecuteNonQuery
-影響を受ける行の数を返します。
SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
SqlCommand
内の質問からSQLを実行し、ExecuteNonQuery
の戻り値を確認すると、影響を受けたレコードの数がわかります。
ドキュメント から:
戻り値
タイプ:System.Int32
影響を受ける行の数。
ExecuteNonQuery()の大部分を実行し、それらを一度にコミットする場合、「SELECT total_changes();」からの戻り値を読み取ることにより、接続後の合計変更数を取得できます。
変更全体を取得する関数:
public static long GetTotalChanges(SQLiteConnection m_dbConnection)
{
string sql = "SELECT total_changes();";
using (SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
reader.Read();
return (long)reader[0];
}
}
}
別の関数で使用します。
public static long MyBulkInserts()
{
using (SQLiteConnection m_dbConnection = new SQLiteConnection())
{
m_dbConnection.Open();
using (var cmd = new SQLiteCommand(m_dbConnection))
{
using (var transaction = m_dbConnection.BeginTransaction())
{
//loop of bulk inserts
{
cmd.ExecuteNonQuery();
}
transaction.Commit();
}
}
return GetTotalChanges(m_dbConnection);
}
}
ExecuteNonQueryは、影響を受けた行を返しますONLY WHEN接続プロパティで「影響を受けた行を使用」が設定され、そうでない場合(デフォルト)は一致した行を返します。