日期:2014-05-17  浏览次数:21018 次

请看以下,测试UPDATE方法
在《ADO.NET 2.0 技术内幕》中,讲到了用SqlDataAdapter的UPDATE方法向数据库提交更新时,需要获取数据源新的时间戳值,于是,在UPDATE语句中添加了SELECT语句来刷新改行,因此,我刚才就用另一个方法对UPDATE方法进行了测试,代码如下:
string strConn = "server = '(local)';database=Person;integrated security = true";
string strSQL = "SELECT * FROM 学生表 WHERE 学生学号 = '0122'";
SqlConnection conn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
DataTable dt = new DataTable("学生表");
da.Fill(dt); //将数据填充到DataTable
dt.Rows[0]["年龄"] = 50; //修改DataTable中的数据
string strup = "SELECT * FROM 学生表 WHERE 学生学号 = '0415'";
da.UpdateCommand = new SqlCommand(strup, conn);
//提交更新
da.Update(dt);
foreach (DataRow row in dt.Rows)
 {
  Console.WriteLine("{0},{1},{2},{3}", row[0], row[1], row[2], row[3]);
  Console.WriteLine();
 }
Console.ReadKey();


上面代码中,我修改了DataTable中的数据,但是调用Update方法时,并不是执行的更新,而是使用SELECT语句选择数据源的另外一行,在最后的输出结果中,DataTable中却只有新选择的这一行了,先前那一行没有了。

1:请问,这是什么原因?
2:如果是这样的话,按照《ADO.NET 2.0 技术内幕》中讲的,如果DataTable中多行更新,岂不是不能刷新该行,而是把其它行都整没了吗?

------解决方案--------------------
你的 strup 就是select啊
------解决方案--------------------
UpdateCommand 应该是要执行的修改语句 update

new SqlCommand("Update CustTest set CustName = @pCustName where CustId = @pCustId")
------解决方案--------------------
2楼正解
------解决方案--------------------
你是不是传参没有对
------解决方案--------------------
2楼正解!