dataset 更新到数据库出错的问题

wweric 2004-08-31 05:45:28
我把一个自己构造的dataset(其中有一张与数据库中一张表一样的表格),使用sqldataadapter的方法update到数据库,当我在update之前调用dataset.AcceptChanges()时,程序运行时不会报错,但更新后数据库中根本没有数据(就是没反应);若在update之前不调用dataset.AcceptChanges(),则报错: 并发冲突:UpdateCommand影响0行记录。 请各位大侠指点一下,那里出问题了.我用dataset的writexml方法看过,dataset中有数据的。我的代码如下;

String connString= "Server=192.168.0.10;Database=GoogleTest;User ID=sa; Password=;Connect TimeOut =30;";
SqlConnection sqlConn = new SqlConnection(connString);
sqlConn.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;

String strSql="select * from tablename";
sqlCmd.CommandText=strSql;

SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd);
SqlCommandBuilder sqlCmdBuilder=new SqlCommandBuilder(sqlAdapter); sqlAdapter.DeleteCommand=sqlCmdBuilder.GetDeleteCommand();
sqlAdapter.InsertCommand=sqlCmdBuilder.GetInsertCommand();
sqlAdapter.UpdateCommand=sqlCmdBuilder.GetUpdateCommand();

//dataset.AcceptChanges();
sqlAdapter.Update(dataset,"Query");

sqlConn.Close();
...全文
159 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wweric 2004-08-31
  • 打赏
  • 举报
回复
我用了上面几位的方法,但仍旧报错
wweric 2004-08-31
  • 打赏
  • 举报
回复
string customErrorMessage;
customErrorMessage = "Concurrency violation\n";
customErrorMessage += ex.Row[0].ToString();

用这个运行出来,报错: Concurrency violation dvd

这是什么意思
Eddie005 2004-08-31
  • 打赏
  • 举报
回复
引起冲突的原因和可能是数据的冲突,例如有重复的主键等等
为了避免数据冲突,应该有sqlAdapter.FillSchema(dataset,...);
把表结构也读进来之后相应的一些冲突就会在改DataSet里的数据的时候就表露出来,
Firestone2003 2004-08-31
  • 打赏
  • 举报
回复
解决并发冲突

1.执行用于在 Try...Catch 块中更新数据库的命令。
2.如果引发异常,则检查 Catch 语句的 Row 属性,以确定导致冲突的原因。
3.根据您的应用程序业务规则添加代码来解决错误。

try
{
SqlDataAdapter1.Update(myDataset);
}
catch (DBConcurrencyException ex)
{
string customErrorMessage;
customErrorMessage = "Concurrency violation\n";
customErrorMessage += ex.Row[0].ToString();
// Replace the above code with appropriate business logic
// to resolve the concurrency violation.
}
Firestone2003 2004-08-31
  • 打赏
  • 举报
回复
//dataset.AcceptChanges();
sqlAdapter.Update(dataset,"Query"); 这个顺序改一下
这样写
sqlAdapter.Update(dataset,"Query");
dataset.AcceptChanges();

sqlAdapter.DeleteCommand=sqlCmdBuilder.GetDeleteCommand();
sqlAdapter.InsertCommand=sqlCmdBuilder.GetInsertCommand();
sqlAdapter.UpdateCommand=sqlCmdBuilder.GetUpdateCommand();
这三行并不需要的
vesky 2004-08-31
  • 打赏
  • 举报
回复
gz

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧