关于在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);
[解决办法]
http://community.csdn.net/Expert/topic/5680/5680626.xml?temp=.4583094
[解决办法]
你这个 'procName ' 是 存储过程 名字吗 ??是在 程序里面写的存储过程还是调用数据库里面
存在的存储过程啊 ?
另外,string strSql = "select * from tab ";这句 貌似你没有使用啊??
[解决办法]
存储过程 我也没用过,你先试试 就用string strSql = "select * from tab ";这句 和我前面那楼 添加的那几句试试,应该是可以更新到数据库的,如果你那个存储过程里面仅仅是简单的1句SQL语句,那也没必要非得用存储过程。
另外,你的存储过程 是数据库里面的,还是在程序里面的??把存储过程的语句 弄出来上查询分析器 试试,你上楼不是说 存储过程那有语法错误吗?检查一下