日期:2014-05-18  浏览次数:20766 次

关于在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);