2017-10-05 1 views
0

2つのデータベースがあります。 私は私が私のテーブルのデータをチェックしましたし、私は意図的に満たされたレコードがたくさんありますので、データがあるはずTEST2で最新の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) +"')"; 

をテストするために、そのIDを転送しようとしています。何が間違っているようですか?

答えて

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

更新された回答を参照してください。これで問題が解決した場合は、この投稿を回答として受け入れてください。 –

関連する問題