public static void Update(DataTable table, string srcTable) { DataSet ds = new DataSet(); table.TableName = srcTable; ds.Tables.Add(table); string _tableName = srcTable; int result = 0; using (SqlConnection sqlconn = new SqlConnection(connectionString)) { sqlconn.Open(); //使用加强读写锁事务 SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted); try { ds.Tables[0].AcceptChanges(); foreach (DataRow dr in ds.Tables[0].Rows) { //所有行设为修改状态 dr.SetModified(); } //为Adapter定位目标表 SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where {1}", _tableName, " 1=2"), sqlconn, tran); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); sqlCmdBuilder.ConflictOption = ConflictOption.OverwriteChanges; da.AcceptChangesDuringUpdate = false; string columnsUpdateSql = ""; SqlParameter[] paras = new SqlParameter[table.Columns.Count]; int parasIndex = 0; //da.Fill(ds,srcTable); //需要更新的列设置参数是,参数名为"@+列名" for (int i = 0; i < table.Columns.Count; i++) { //此处拼接要更新的列名及其参数值 columnsUpdateSql += ("[" + table.Columns[i].ColumnName + "]" + "=@" + table.Columns[i].ColumnName + ","); if (table.Columns[i].ColumnName == "id") { paras[i] = new SqlParameter("@" + table.Columns[i].ColumnName, SqlDbType.Int, 11, table.Columns[i].ColumnName); } else { paras[i] = new SqlParameter("@" + table.Columns[i].ColumnName, SqlDbType.NVarChar, 2000, table.Columns[i].ColumnName); } } if (!string.IsNullOrEmpty(columnsUpdateSql)) { //此处去掉拼接处最后一个"," columnsUpdateSql = columnsUpdateSql.Remove(columnsUpdateSql.Length - 1); } //此处生成where条件语句 string limitSql = ("[" + table.Columns[0].ColumnName + "]" + "=@" + table.Columns[0].ColumnName); SqlCommand updateCmd = new SqlCommand(string.Format(" UPDATE [{0}] SET {1} WHERE {2} ", _tableName, columnsUpdateSql, limitSql)); //不修改源DataTable updateCmd.UpdatedRowSource = UpdateRowSource.None; da.UpdateCommand = updateCmd; da.UpdateCommand.Parameters.AddRange(paras); //da.UpdateCommand.Parameters.Add("@" + table.Columns[0].ColumnName, table.Columns[0].ColumnName); //每次往返处理的行数 da.UpdateBatchSize = table.Rows.Count; result = da.Update(ds, _tableName); ds.AcceptChanges(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); throw ex; } finally { sqlconn.Dispose(); sqlconn.Close(); } } }
如果传入的id库里边没有就会报这错误,帮忙解决一下
正常情况下是可以正常修改,可是如果有重复的id或者把库里边跟dataset对应的id删掉就会出问题
楼主还没有毕业还是刚刚毕业,明显就是被教科书毒害的一代人。
数据库事务操作就是要么都成功,要么都失败。
对于大部分的人来说,其实事务是没有必要的。(大神别喷,这是事实)
因为很多人根本不关心数据库原来是怎么样的,只要让他的SQL顺利执行就行了。
你如果要写事务,请先学习一下,事务是起什么作用的,否则,放弃事务吧。
那怎么改下才能不报错啊
好吧,我去掉事物就可以修改了
@亲爱de小孩: 有关事务的代码,删除掉就差不多了。
//使用加强读写锁事务 SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
tran.Commit();
tran.Rollback();
问题是你这些代码看不懂的话,你不如另外去找一段简单一点的代码。