2012-06-23 1 views
0

테이블에서 행을 가져 와서 다른 테이블에 삽입하려고합니다. 이를 위해이 간단한 코드를 작성했지만 문제가 무엇인지 파악할 수는 없습니다.명령문을 실행할 때 Executenonquery에 -1이 있습니다.

당신이 내 문을 실행 한 후 ExecuteNonQuery을 사용하고 출력을 볼 메시지 박스를 사용하지만, 메시지 상자의 출력은 -1

for (int i = 1; i <= 10; i++) 
{ 
    SqlCommand cmd = new SqlCommand("Select exp_date from tbl_expences where exp_id='" + i + "'", con); 

    int j = cmd.ExecuteNonQuery(); 

    MessageBox.Show(Convert.ToString(j)); 

    if (j > 1) 
    { 
     string date = cmd.ExecuteScalar().ToString(); 

     MessageBox.Show(date); 
     SqlCommand cmd1 = new SqlCommand("update other_expensive set exp_date='" + date + "' where exp_id='" + i + "'", con); 
    } 
} 
+0

'.ExecuteNonQuery()'의 반환 값은 ** INSERT, UPDATE 또는 DELETE 연산에 의해 영향을받는 ** 행 수입니다. 'SELECT'는 어떤 행에도 영향을 미치지 않기 때문에 값은 정의되지 않고 -1로 반환됩니다. 모든 사람이 볼 수 있도록 설계된 것입니다. [MSDN에서 문서화되어 있습니다.] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx) 이 같은 것을 먼저 알고 싶다면 MSDN을 확인하십시오! –

답변

2

ExecuteNonQuery()INSERT, UPDATE 또는 DELETE에 사용되는 한 볼 수 있듯이. SELECT을 사용하려면 ExecuteReader()을 사용하십시오.

+0

이제 변경했습니다. int j = cmd.ExecuteNonQuery(); x int j = Convert.ToInt32 (cmd.ExecuteReader()); 및 예외가 발생했습니다. 'System.Data.SqlClient.SqlDataReader'형식의 개체를 'System.IConvertible'형식으로 캐스팅 할 수 없습니다. –

+0

'ExecuteReader'는'SqlDataReader'를 반환합니다. msdn에서 어떻게 작동하는지보십시오. – Femaref

+0

당신이 습득하려는 것을 정확히 설명 할 수 있습니까? – XIVSolutions

0

왜이 경우 코드를 실행하면 20 개 (30 개)가 실행됩니까? ExecuteNonQuery의 문서에서

: UPDATE, INSERT를 들어

, DELETE 문은, 반환 값은 명령에 의해 영향을받는 행의 수입니다. 삽입 또는 갱신중인 테이블에 트리거가 존재하면, 리턴 값에는 삽입 또는 갱신 조작과 트리거 또는 트리거에 의해 영향을받는 행의 수에 영향을받는 행 수가 포함됩니다. 다른 모든 유형의 명령문의 경우 반환 값은 -1입니다. 롤백이 발생하면 반환 값은 -1입니다.

(강조는 추가) 왜 그냥 :

하나의 쿼리를 사용하여 병렬로 모든 업데이트를 수행하고 루프를 방지하고, "스텝에 의한 것
update oe set exp_date=e.exp_date 
from 
    other_expensive oe 
     inner join 
    tbl_expense e 
     on 
      oe.exp_id = e.exp_id 
where 
    e.exp_id between 1 and 10 

- 단계 "접근 방식을 사용하려고하는 것 같습니다.

관련 문제