读书人

导入数据行后(importrow)为啥不能更新

发布时间: 2013-06-19 10:26:41 作者: rapoo

导入数据行后(importrow)为什么不能更新到数据库(在线)

SqlDataAdapter da = new SqlDataAdapter("select * from fzsdb", datacn.cn);
SqlCommandBuilder scb = new SqlCommandBuilder(da);

DataSet dsa = new DataSet();
datacn.cn.Close();
da.Fill(dsa, "fzsdb");
DataTable fzsdb = dsa.Tables["fzsdb"];

foreach (DataRow dr in dt.Rows)
{
fzsdb.ImportRow(dr);
}
fzsdb.AcceptChanges();
a.Update(dsa.Tables["fzsdb"] );


[解决办法]
具体代码应该是下面这样吧:


SqlDataAdapter da = new SqlDataAdapter("select * from fzsdb", datacn.cn);
SqlCommandBuilder scb = new SqlCommandBuilder(da);

DataSet dsa = new DataSet();
datacn.cn.Open();
da.Fill(dsa, "fzsdb");
DataTable fzsdb = dsa.Tables["fzsdb"];

foreach (DataRow dr in dt.Rows)
{
fzsdb.ImportRow(dr)
}


fzsdb.AcceptChanges();
da.Update(fzsdb );



你这样只是更新了DataTable中的数据而已了,此时你还需要把DataTable的数据更新到数据库中的。
具体可以参考下下面的文章:
http://msdn.microsoft.com/zh-cn/library/z1z2bkx2(v=vs.80).aspx
http://msdn.microsoft.com/zh-cn/library/33y2221y(v=vs.80).aspx
[解决办法]
你需要为SqlCommandBuilder 添加UPDATE的COMMAND对象
[解决办法]

using (SqlCommand comm = conn.CreateCommand())
{
comm.CommandText = "select * from fzsdb";
SqlDataAdapter da = new SqlDataAdapter(comm);
SqlCommandBuilder scb = new SqlCommandBuilder(da);

DataSet dsa = new DataSet();
datacn.cn.Close();
da.Fill(dsa, "fzsdb");
DataTable fzsdb = dsa.Tables["fzsdb"];

foreach (DataRow dr in dt.Rows)
{
fzsdb.ImportRow(dr);
}
fzsdb.AcceptChanges();
da.Update(dsa.Tables["fzsdb"] );
}
[解决办法]
注意 此表 fzsdb 是否有主键,如果没有下面将不能执行。



SqlDataAdapter da = new SqlDataAdapter("select * from fzsdb", datacn.cn);
SqlCommandBuilder scb = new SqlCommandBuilder(da);

DataSet dsa = new DataSet();
//datacn.cn.Close();//这个关太早了吧。
da.Fill(dsa, "fzsdb");
DataTable fzsdb = dsa.Tables["fzsdb"];



foreach (DataRow dr in dt.Rows)
{
fzsdb.ImportRow(dr);
}
a.Update(dsa.Tables["fzsdb"] );


datacn.cn.Close();//这句也置后

fzsdb.AcceptChanges(); //这句要放后面。


读书人网 >C#

热点推荐