关于在c#中,通过存储过程读出数据后,再通过SqlDataAdapter将修改的表更新到数据库
源代码:
string strConn = "server=localhost;Database=test;uid=sa;pwd=1 ";
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string strSql = "select * from tab ";
SqlDataAdapter dpt = new SqlDataAdapter( "procName ",conn
DataSet ds = new DataSet();
dpt.Fill(ds);
DataRow dr = ds.Tables[0].NewRow();
dr[ "aa "] = "gggg ";
dr[ "bb "] = "gggg ";
dr[ "cc "] = "gggg ";
dr[ "fid "] = 9;
ds.Tables[0].Rows.Add(dr);
SqlCommandBuilder scb = new SqlCommandBuilder(dpt);
dpt.Update(ds);
我在调试时发现能取出来,也能对表增加记录等操作,但执行对最后的dpt.Update(ds);就报错,请问正确的方法应该怎么做,
------解决方案--------------------报的错误是什么
------解决方案--------------------存储过程读出的数据用SqlDataAdapter.Update来更新估计是不行的
------解决方案--------------------表是否有主键
如果要更新最好这样填弃DTASET----dpt.FillSCHEMA(ds,。。。MAPPED);然后再FILL(ds)
------解决方案--------------------报的错误是什么
表是否有主键
很关键
------解决方案--------------------string strSql = "select * from tab ";
这句 干啥的好像没用到啊 ??
------解决方案--------------------很有可能是表没有主键
------解决方案--------------------表没有主键 sqlbuild就会不能动态生成insert updata等语句
但..这用存储过程取出的....沉思ing
------解决方案--------------------ds.Tables[0].Rows.Add(dr);
// < < < <加上这2句
DataSet changesds=ds.GetChanges();
ds.AcceptChanges();
// < < <
SqlCommandBuilder scb = new SqlCommandBuilder(dpt);
//dpt.Update(ds);要修改为下句
dpt.Update(changesds);