Вопрос по c#, sql, .net, mysql – Получить затронутые строки в ExecuteNonQuery

37

В настоящее время я работаю над проектом на C # и выполняю запрос на вставку, который одновременно выполняет выборку, например:

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

Есть ли способ узнать, сколько строк было вставлено во время этого запроса?

Ваш Ответ

4   ответа
0

ExecuteNonQuery возвращает поврежденные строкиONLY WHEN Использовать Затронутые строки в свойствах соединения устанавливается, если нет (по умолчанию) возвращает совпавшие строки.

79

ExecuteNonQuery - возвращает количество затронутых строк.

SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededblogs.msdn.microsoft.com/spike/2009/01/27/…
Error: User Rate Limit ExceededcouldError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded) statement separately *beforeError: User Rate Limit Exceeded
14

Если вы запустите SQL из вашего вопроса вSqlCommand и проверьте возвращаемое значениеExecuteNonQuery он должен сказать вам, сколько записей было затронуто.

Отдокументация:

Return Value
Type: System.Int32
The number of rows affected.

0

Если вы запустите большую часть ExecuteNonQuery () и зафиксируете их все за один раз, вы можете получить общее количество изменений после подключения, прочитав возвращаемое значение из & quot; SELECT total_changes (); & quot;

Функция для получения итоговых изменений:

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

Похожие вопросы