2017-10-05 4 views
0

두 개의 데이터베이스가 있습니다. 나는 TEST2의 최신 ID를 얻고 난 내 테이블 데이터를 확인했지만 내가 의도적으로 채워진 레코드 많이 있기 때문에 그 ID가예외 오류는 데이터가 없음을 나타냅니다. 코딩시 오류가 발생할 수 있습니다.

SqlCommand readcmd = new SqlCommand("select MAX(PID) from test2;"); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    rdr.Read(); 
    int pid = (int)rdr["PID"]; 
    cmd.CommandText = "insert into test (PID) values ('"+ rdr.GetInt32(0) +"')"; 

데이터가 있어야 테스트 전달하기 위해 노력하고있어. 뭐가 잘못 됐어?

답변

0

SqlDataReader는 전달 전용 판독기입니다. SqlDataReader가 반환하는 데이터 스트림에서 읽는 일반적인 방법은 while 루프를 사용하여 각 행을 반복하는 것입니다.

SqlCommand readcmd = new SqlCommand("select MAX(PID) from test2;"); 
SqlDataReader rdr = cmd.ExecuteReader(); 
int pid = 0; 
if(rdr.HasRows) 
{ 
     while (rdr.Read()) 
     { 
      pid = rdr.GetInt32(0); 
     } 
} 
cmd.CommandText = "insert into test (PID) values (@pid)"; 
cmd.Parameters.AddWithValue("@pid", pid); 

또한 일반적으로 변수를 명령 텍스트에 직접 연결하면 안됩니다. 매개 변수를 대신 사용하여 SQL 주입 공격을 방지하십시오.

+0

답장을 보내 주셔서 감사합니다. demoXml이란 무엇입니까? – Marion

+0

업데이트 된 답변보기 이 방법으로 문제가 해결되면 답변으로이 게시물을 수락하십시오. –

관련 문제