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