나는 현재 C# 프로젝트에서 일하고 내가 예를 들어, 같은 시간에 선택을하지 삽입 쿼리를 실행하고 있습니다에 영향을받는 행을 얻기 이 쿼리 중에 많은 행이 삽입 되었습니까?ExecuteNonQuery는
33
A
답변
69
ExecuteNonQuery
- 영향을받는 행 수를 반환합니다.
SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
12
질문에서 SqlCommand
의 SQL을 실행하고 ExecuteNonQuery
의 반환 값을 확인하면 영향을받은 레코드 수를 알려야합니다. documentation에서
:
반환 값
유형 : 선택 System.Int32
영향을받는 행의 수입니다.
0
당신이 ExecuteNonQuery는()의 대부분을 실행하고 한 번에 모두 커밋 경우의 반환 값을 읽어하여 접속 후 전체 변경 횟수를 얻을 수 있습니다 ") (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);
}
}
나는이 일을 해요
, 새로운 행이 만들어졌습니다에도 불구하고 어떤 이유를 내 이 메소드는 -1을 리턴합니다. SQL 문에서 뭔가를 사용해야합니까? – JoeManiaci
삽입/업데이트/삭제를 수행 할 때 SqlCommand.ExecuteNonQuery()가 -1을 반환합니다. https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert -update-delete/ –
예상대로 작동하지 않을 수도 있습니다. 업데이트의 경우 반환되는 행 수는 실제로 변경된 행 수가 아닌 * 변경 될 수있는 행 수입니다. 최대 50 개의 행에 영향을 줄 수있는 업데이트를한다고 가정 해 보겠습니다. 그러나 이러한 행 중 35 개에 대해서는 UPDATE로 인해 데이터가 변경되지 않습니다. 50 개의 가능한 행 중 15 개의 행에 대해서만 데이터가 변경됩니다. 이 경우 "15"가 반환 값이 되길 기대하지만 반환 값은 총 행 수인 50입니다. – Ian