日期:2014-05-17  浏览次数:20760 次

一个关于违反并发性的问题
我在参考数据库书时,第一次遇到这样的问题,书本上没有这方面的介绍,网上说有3种可能,1.没设主键(我已经设主键了)2.DeleteCommandde的问题(我没用到这个属性)3.是UpdataCommand的问题(这个我已经确定了)。下面是代码,我想让大虾们帮我修正一下……并指出问题以及原理
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(qry, conn);
DataSet ds = new DataSet();
da.Fill(ds, "student");
DataTable dt = ds.Tables["student"];
dt.Rows[3]["Name"] = "周永鹏";

foreach (DataRow row in dt.Rows)
{
      Console.WriteLine("{0}\t{1}\t{2}", row["Name"], row["Age"].ToString(), row["ID"]);
}
SqlCommand cmd = new SqlCommand(upd, conn);
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 10, "Name");
SqlParameter parm = cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 10, "ID");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
da.Update(ds, "student");
------解决方案--------------------
这和什么并发貌似木有关系.
------解决方案--------------------
但是错误确实写的就是违反并发性
------解决方案--------------------
把调试的详细信息发上来看看
------解决方案--------------------
Error:System.Data.DBConcurrencyException: 违反并发性: UpdateCommand 影响了预期 1
 条记录中的 0 条。
   在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArg
s rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowU
pdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMappi
ng tableMapping)
   在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable,
DataTableMapping tableMapping)
   在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
   在 PersistChanges.Program.Main(String[] args) 位置 E:\文档\C#\==PersistChange
s\PersistChanges\Program.cs:行号 37
请按任意键继续. . .
------解决方案--------------------
再发两条有用的代码
string qry = @"select * from Student where Age=22";
string upd = @"update Student set ID=@ID where Name=@Name";
------解决方案--------------------
求解啊……
------解决方案--------------------
你的这张表有主键唯一列吗?