[WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1。"), SoapHeader("currentUser")] public int Update(DataSet ds) { if (!ValidateUser(currentUser.UserName, currentUser.UserPass)) { return -1; } else { int res = 0; using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=xxxx;User ID=sa;Password=sa")) { sqlconn.Open(); / / //使用加强读写锁事务 SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted); try { foreach (DataRow dr in ds.Tables[0].Rows) { //所有行设为修改状态 dr.SetModified(); } //为Adapter定位目标表 SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where 1=0 ", ds.Tables[0].TableName), sqlconn, tran); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.AcceptChangesDuringUpdate = false; SqlCommand updatecmd = new SqlCommand(string.Format(" UPDATE [{0}] SET [Name] = @Name WHERE ([ID] = @ID) ", ds.Tables[0].TableName)); //不修改源DataTable updatecmd.UpdatedRowSource = UpdateRowSource.None; da.UpdateCommand = updatecmd; da.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name"); da.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, ds.Tables[0].Columns[0].ColumnName); da.UpdateBatchSize = 10000; res = da.Update(ds.Tables[0]); ds.AcceptChanges(); tran.Commit(); sqlconn.Close(); } catch { tran.Rollback(); return -1; } } return res; } } 注意:如果不指定DataAdapter的UpdateCommand ,则DataAdapter会自动构造默认的Update命令,包含所有列的更新。