web-dev-qa-db-ja.com

ExecuteNonQueryで影響を受ける行を取得します

私は現在C#プロジェクトに取り組んでいますが、同時に選択も行う挿入クエリを実行しています、例えば:

INSERT INTO table (SELECT * FROM table WHERE column=date)

このクエリ中に挿入された行数を確認する方法はありますか?

41
Boardy

ExecuteNonQuery-影響を受ける行の数を返します。

SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
86
John Woo

SqlCommand内の質問からSQLを実行し、ExecuteNonQueryの戻り値を確認すると、影響を受けたレコードの数がわかります。

ドキュメント から:

戻り値
タイプ:System.Int32
影響を受ける行の数。

14
M.Babcock

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);
            }
        }
0
Jfly

ExecuteNonQueryは、影響を受けた行を返しますONLY WHEN接続プロパティで「影響を受けた行を使用」が設定され、そうでない場合(デフォルト)は一致した行を返します。

0
AlejandroAlis