Datalist是用在前台绑定字段,后台
datalist1.DataBind();
然后在修改记录之后更新到数据库时先将数据保存在viewstate中(DataSet类型)
private bool SaveTempDataJK_Yi(string strViewStateIndex, params int[] index)
{
DataSet ds = (DataSet)this.ViewState["ds_base"];
//循环datalist的每行
for (int i = 0; i < this.DataListJK_Yi.Controls.Count; i++)
{
TextBox txtCH = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtCH");
TextBox txtYCZS = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtYCZS");
TextBox txtPZL = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtPZL");
/*......一些判断数据有效性的*/
//cenghao列是主键列,判断该列数值有改动则修改viewstate中的dataset
DataRow[] modifiedRow = ds.Tables[0].Select("cenghao='" + txtCH.Text.Trim() + "'"); if (modifiedRow[0]["sjzsl"].ToString().Trim() != txtSJZSL.Text.Trim())
{
modifiedRow[0]["sjzsl"] = txtSJZSL.Text.Trim();
}
if (modifiedRow[0]["szzj"].ToString().Trim() != txtSZZJ.Text.Trim())
{
modifiedRow[0]["szzj"] = txtSZZJ.Text.Trim();
}
} return true;
}
protected void btnSaveToDB_Base_Click(object sender, ImageClickEventArgs e)
{
try
{
if (SaveTempData_Base("ds_base"))
{
#region 判断输入是否有效
//数据库连接
System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection(
ConfigurationManager.ConnectionStrings["ydyjjlConnectionString"].ConnectionString);
//取得yczsh的值,famc和cenghao是该表的主键
string sqlDCYL = "select yczsh from des_fanganfcsj where famc='" + Session["famc"].ToString() + "' and cenghao='" +
((TextBox)this.DataList_Base.Items[0].FindControl("txtCH")).Text.Trim() + "'";
DataSet dsYCZS = new DataSet();
SqlDataAdapter daYCZS = new SqlDataAdapter(sqlDCYL, myConn);
//填充dataset
daYCZS.Fill(dsYCZS);
//判断数据有效的公式
double DCYLPD = 0d;
if (dsYCZS.Tables[0].Rows.Count != 0)
{
DCYLPD = 0.5 * double.Parse(dsYCZS.Tables[0].Rows[0][0].ToString().Trim()) / 100;
}
if (txtDCYL.Text.Trim() != string.Empty && double.Parse(txtDCYL.Text.Trim()) < DCYLPD)//txtDCYL为输入值的控件
{
lblErrors.Visible = true;
lblErrors.Text = "数据输入错误!";
return;
}
#endregion
if (((DataSet)this.ViewState["ds_base"]).GetChanges() != null)
{
SqlDataAdapter da = new SqlDataAdapter("select * from des_fanganfcsj where 1<>1", myConn);
DataSet ds = new DataSet();
da.Fill(ds);
//将viewstate合并到ds中,ds是des_fanganfcsj表的结构
ds.Merge((DataSet)this.ViewState["ds_base"]);
SqlCommandBuilder sqlBuild = new SqlCommandBuilder(da);
//更新库
da.Update(ds);
ds.AcceptChanges();
this.ViewState["ds_base"] = ds;
}
}
else
{
return;
} this.lblErrors.Text = "保存成功!";
}
catch
{ this.lblErrors.Text = "保存失败!";
return;
}
}
就在执行到da.Update(ds)这个的时候出现错误:"违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。"
异常详细信息:
捕捉到 System.Data.DBConcurrencyException
Message="违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。"
Source="System.Data"
RowCount=1
StackTrace:
在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet)
在 Content_MyFangAn_Content_sztp_fanganceshishuju.btnSaveToDB_Base_Click(Object sender, ImageClickEventArgs e) 位置 f:\Project Developing\cs_To_bs\BS\Content\MyFangAn_Content_sztp_fanganceshishuju.aspx.cs:行号 725
datalist1.DataBind();
然后在修改记录之后更新到数据库时先将数据保存在viewstate中(DataSet类型)
private bool SaveTempDataJK_Yi(string strViewStateIndex, params int[] index)
{
DataSet ds = (DataSet)this.ViewState["ds_base"];
//循环datalist的每行
for (int i = 0; i < this.DataListJK_Yi.Controls.Count; i++)
{
TextBox txtCH = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtCH");
TextBox txtYCZS = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtYCZS");
TextBox txtPZL = (TextBox)this.DataListJK_Yi.Controls[i].FindControl("txtPZL");
/*......一些判断数据有效性的*/
//cenghao列是主键列,判断该列数值有改动则修改viewstate中的dataset
DataRow[] modifiedRow = ds.Tables[0].Select("cenghao='" + txtCH.Text.Trim() + "'"); if (modifiedRow[0]["sjzsl"].ToString().Trim() != txtSJZSL.Text.Trim())
{
modifiedRow[0]["sjzsl"] = txtSJZSL.Text.Trim();
}
if (modifiedRow[0]["szzj"].ToString().Trim() != txtSZZJ.Text.Trim())
{
modifiedRow[0]["szzj"] = txtSZZJ.Text.Trim();
}
} return true;
}
protected void btnSaveToDB_Base_Click(object sender, ImageClickEventArgs e)
{
try
{
if (SaveTempData_Base("ds_base"))
{
#region 判断输入是否有效
//数据库连接
System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection(
ConfigurationManager.ConnectionStrings["ydyjjlConnectionString"].ConnectionString);
//取得yczsh的值,famc和cenghao是该表的主键
string sqlDCYL = "select yczsh from des_fanganfcsj where famc='" + Session["famc"].ToString() + "' and cenghao='" +
((TextBox)this.DataList_Base.Items[0].FindControl("txtCH")).Text.Trim() + "'";
DataSet dsYCZS = new DataSet();
SqlDataAdapter daYCZS = new SqlDataAdapter(sqlDCYL, myConn);
//填充dataset
daYCZS.Fill(dsYCZS);
//判断数据有效的公式
double DCYLPD = 0d;
if (dsYCZS.Tables[0].Rows.Count != 0)
{
DCYLPD = 0.5 * double.Parse(dsYCZS.Tables[0].Rows[0][0].ToString().Trim()) / 100;
}
if (txtDCYL.Text.Trim() != string.Empty && double.Parse(txtDCYL.Text.Trim()) < DCYLPD)//txtDCYL为输入值的控件
{
lblErrors.Visible = true;
lblErrors.Text = "数据输入错误!";
return;
}
#endregion
if (((DataSet)this.ViewState["ds_base"]).GetChanges() != null)
{
SqlDataAdapter da = new SqlDataAdapter("select * from des_fanganfcsj where 1<>1", myConn);
DataSet ds = new DataSet();
da.Fill(ds);
//将viewstate合并到ds中,ds是des_fanganfcsj表的结构
ds.Merge((DataSet)this.ViewState["ds_base"]);
SqlCommandBuilder sqlBuild = new SqlCommandBuilder(da);
//更新库
da.Update(ds);
ds.AcceptChanges();
this.ViewState["ds_base"] = ds;
}
}
else
{
return;
} this.lblErrors.Text = "保存成功!";
}
catch
{ this.lblErrors.Text = "保存失败!";
return;
}
}
就在执行到da.Update(ds)这个的时候出现错误:"违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。"
异常详细信息:
捕捉到 System.Data.DBConcurrencyException
Message="违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。"
Source="System.Data"
RowCount=1
StackTrace:
在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet)
在 Content_MyFangAn_Content_sztp_fanganceshishuju.btnSaveToDB_Base_Click(Object sender, ImageClickEventArgs e) 位置 f:\Project Developing\cs_To_bs\BS\Content\MyFangAn_Content_sztp_fanganceshishuju.aspx.cs:行号 725
应该是这个表结构的关系。
另外,updatecommand默认更新所有字段的值
应该是这个表结构的关系。
另外,updatecommand默认更新所有字段的值
for(int i=0;i<300;i++){
int index = i;
if(i==299)
{
index = 0;
}
dataset.Tables[0].Rows[index].BeginEdit();
dataset.Tables[0].Rows[index]["Userid"] = i;
dataset.Tables[0].Rows[index]["UserName"] = "Name" + i.ToString();
dataset.Tables[0].Rows[index].EndEdit();
}
sd.Update(dataset.Tables[0]);当你要更新300数据的时候,你可以在299条记录的时候,把信息替换成不可能符合的条件(如UserID=0)上边的代码我运行过了,是可以的,希望可以给楼主一些参考,呵呵,还要记得给我点分,我五分都不到了。