2017-10-05 30 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

查看已更新的答案。如果这解决了您的问题,请接受此帖作为答案。 –

相关问题