복붙노트

[SQL] ExecuteNonQuery는에 영향을받는 행을 얻기

SQL

ExecuteNonQuery는에 영향을받는 행을 얻기

나는 현재 C # 프로젝트에서 일하고 또한 예컨대 같은 시간에 선택을하지 삽입 쿼리를 실행하고 있습니다 :

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

나는이 쿼리 중에 삽입 된 행 수를 볼 수있는 방법이 있나요?

해결법

  1. ==============================

    1.ExecuteNonQuery는이 - 영향을받는 행의 수를 반환합니다.

    ExecuteNonQuery는이 - 영향을받는 행의 수를 반환합니다.

    SqlCommand comm;
    // other codes
    int numberOfRecords = comm.ExecuteNonQuery();
    
  2. ==============================

    2.당신이하는 SqlCommand에서 귀하의 질문에서 SQL을 실행하고 ExecuteNonQuery는의 반환 값을 선택하면 많은 레코드가 영향을받은 당신을 말해야한다.

    당신이하는 SqlCommand에서 귀하의 질문에서 SQL을 실행하고 ExecuteNonQuery는의 반환 값을 선택하면 많은 레코드가 영향을받은 당신을 말해야한다.

    문서에서 :

  3. ==============================

    3.또한 반드시 한 가지의 수 당신은 연결 문자열에 문을 추가해야합니다 예를 들면 :

    또한 반드시 한 가지의 수 당신은 연결 문자열에 문을 추가해야합니다 예를 들면 :

    string const "Server=localhost; PORT=3306; Database=db; User id=root; password='';UseAffectedRows=True";
    MySqlConnection con = new MySqlConnection(const);
    con.Open();
    MySqlCommand cmd = new MySqlCommand(con);
    cmd.CommandText = "Update db set table = value where Column = value";
    int numberOfRecords = cmd.ExecuteNonQuery();
    

    의하십시오 :

    UseAffectedRows=True
    

    그것은 영향을받는 행의 오른쪽 값을 반환 있도록

  4. ==============================

    4.하지 (기본값) 반환 행을 일치하는 경우는 ExecuteNonQuery는 연결 속성에서 사용 영향을받는 행이 설정되어있는 경우에만 영향을받는 행을 반환합니다.

    하지 (기본값) 반환 행을 일치하는 경우는 ExecuteNonQuery는 연결 속성에서 사용 영향을받는 행이 설정되어있는 경우에만 영향을받는 행을 반환합니다.

  5. ==============================

    5.당신이 ExecuteNonQuery는 ()의 대부분을 실행하고 한 번에 모두 커밋 경우의 반환 값 읽기로 접속 후 전체 변화의 수를 얻을 수있다 "SELECT TOTAL_CHANGES를 ();"

    당신이 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);
                }
            }
    
  6. from https://stackoverflow.com/questions/10059158/get-affected-rows-on-executenonquery by cc-by-sa and MIT license