2014-04-04 2 views
0

저는 MySQL-Connector/Net으로 작업하고 있습니다.다른 명령이 성공적이면 명령을 실행 하시겠습니까?

명령이 실제로 실행되었음을 어떻게 확신 할 수 있습니까? 이렇게 작동합니까, 아니면 그렇게 작동하지 않습니까?

첫 번째 명령이 인 경우 두 번째 명령이 통계를 업데이트하기 때문에 명령이 실행되도록하려면이 명령을 실행하고 싶습니다.

sql 명령과 sql_adapter 업데이트 및 채우기 명령에 필요합니다.

if (sql_command.ExecuteNonQuery() != 0) 
{ 
    sql_command2.ExecuteNonQuery(); 
} 

if (sql_adapter.Fill(dataSet, "Entry") != 0) 
{ 
    sql_command2.ExecuteNonQuery(); 
} 
+0

첫 번째 방법 :

try { sql_command.ExecuteNonQuery(); } catch { MessageBox.Show("The first SQL command failed"); } sql_command2.ExecuteNonQuery(); 

여기 SqlCommand.ExecuteNonQuery() 예외에 대한 자세한 읽기를 바른 길이다. ExecuteNonQuery는 성공하지 못하면 -1을 반환합니다. – Relax

+0

@Relax 나는 그것이 맞는 것 같지 않습니다. 'ExecuteNonQuery'는 영향을받는 행의 수를 반환합니다. 없으면 0을 반환하고 쿼리 오류가 발생하면 예외를 throw합니다. – CodingIntrigue

+0

@RGraham 여기를 참고하십시오 : http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx 인용구 : "UPDATE, INSERT 및 DELETE 문에서 반환 값은 명령에 의해 영향을받는 행의 수입니다. 삽입 또는 업데이트되는 테이블에 트리거가 있으면 삽입 또는 업데이트 작업과 영향을받는 행의 수에 영향을받는 행 수를 반환 값에 포함합니다 다른 모든 유형의 명령문의 경우 반환 값은 -1이고 롤백이 발생하면 반환 값은 -1입니다. " – Relax

답변

1

는 다음을 사용

if (sql_command.ExecuteNonQuery() > 0) 
{ 
    sql_command2.ExecuteNonQuery(); 
} 

는 ExecuteNonQuery는 영향을받는 레코드 수를 반환합니다.

성공적인 명령어 1의 당신의 정의는 통계를 업데이트하는 Command2를 실행하도록 some 기록을 갱신하게 될 경우 (명령 자체와 관련된 모든 트리거에 의해), 위의 코드는 충분하다. 성공적인 명령어 1의 당신의 정의는 (관계없이 업데이트 된 레코드) **without** 오류를 실행하는 경우

이를 사용하십시오 ExecuteNonQuery는 할 수도 레코드는 영향을받지 않은 경우 0을 반환하고 있기 때문에

sql_command.ExecuteNonQuery(); 
sql_command2.ExecuteNonQuery(); 

이것은 성공적으로 실행되면 쿼리/저장 프로 시저에 **SET NOCOUNT ON**이 발생하면 -1을 반환합니다. (-1도 롤백 등의 반환)

+0

은 sql_adapter 채우기 및 업데이트 명령과도 작동합니까? – Proton

관련 문제