主要是想实现通过数据集批量自动更新或者删除数据.
关于批量删除或更新的实现以及问题下面提到的关键代码部分就是这里
使用for遍历删除时可以的,但是使用foreach遍历删除时
要使用dt.AcceptChanges();
改变行的状态置为Unchanged
但是如果这个表有主键的情况下就会报错
"违反并发性 deletecommand影响了预期1条记录中的0条"问题为何for遍历删除无问题呢?
//删除DataTable的某一行
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i].Delete();
} //如果用foreach删除需要改变行的状态置为Unchanged,否则这里会报错
//dt.AcceptChanges();
//foreach (DataRow subdr in dt.Rows)
//{
// subdr.Delete();
//}
下面是完全代码 public static void ADOUpdate()
{
SqlExecutor sqlExecutor = new SqlExecutor();
//获取链接
sqlExecutor.Connect();
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM temp", sqlExecutor.m_Connection);
SqlCommandBuilder Builder = new SqlCommandBuilder(sda);
//使用DataAdapter讲查询到的数据表填充到DataSet中,命名为"A"
DataSet ds = new DataSet();
sda.Fill(ds, "A"); //以下更改DataTabe中的数据
DataTable dt = ds.Tables["A"];
//编辑DataTable的某一行
DataRow dr = ds.Tables[0].Rows[0];
dr.BeginEdit();
dr["b"] = "编辑b";
dr["c"] = "编辑c";
dr.EndEdit();
//为DataTable增加一行
DataRow dr2 = dt.NewRow();
dr2["a"] = "128883";
dr2["b"] = "新加1";
dr2["c"] = "新加2";
dt.Rows.Add(dr2); //删除DataTable的某一行
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i].Delete();
} //如果用foreach删除需要改变行的状态置为Unchanged,否则这里会报错
//dt.AcceptChanges();
//foreach (DataRow subdr in dt.Rows)
//{
// subdr.Delete();
//}
//释放所有资源
sda.Update(ds, "A");
Builder.Dispose();
ds.Dispose();
sda.Dispose();
}
关于批量删除或更新的实现以及问题下面提到的关键代码部分就是这里
使用for遍历删除时可以的,但是使用foreach遍历删除时
要使用dt.AcceptChanges();
改变行的状态置为Unchanged
但是如果这个表有主键的情况下就会报错
"违反并发性 deletecommand影响了预期1条记录中的0条"问题为何for遍历删除无问题呢?
//删除DataTable的某一行
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i].Delete();
} //如果用foreach删除需要改变行的状态置为Unchanged,否则这里会报错
//dt.AcceptChanges();
//foreach (DataRow subdr in dt.Rows)
//{
// subdr.Delete();
//}
下面是完全代码 public static void ADOUpdate()
{
SqlExecutor sqlExecutor = new SqlExecutor();
//获取链接
sqlExecutor.Connect();
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM temp", sqlExecutor.m_Connection);
SqlCommandBuilder Builder = new SqlCommandBuilder(sda);
//使用DataAdapter讲查询到的数据表填充到DataSet中,命名为"A"
DataSet ds = new DataSet();
sda.Fill(ds, "A"); //以下更改DataTabe中的数据
DataTable dt = ds.Tables["A"];
//编辑DataTable的某一行
DataRow dr = ds.Tables[0].Rows[0];
dr.BeginEdit();
dr["b"] = "编辑b";
dr["c"] = "编辑c";
dr.EndEdit();
//为DataTable增加一行
DataRow dr2 = dt.NewRow();
dr2["a"] = "128883";
dr2["b"] = "新加1";
dr2["c"] = "新加2";
dt.Rows.Add(dr2); //删除DataTable的某一行
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i].Delete();
} //如果用foreach删除需要改变行的状态置为Unchanged,否则这里会报错
//dt.AcceptChanges();
//foreach (DataRow subdr in dt.Rows)
//{
// subdr.Delete();
//}
//释放所有资源
sda.Update(ds, "A");
Builder.Dispose();
ds.Dispose();
sda.Dispose();
}
解决方案 »
- 这。。。又尴尬了。还是Excel问题。
- 高分求图片预览功能!
- 字符串转换成datetime问题,急!!!
- 面试题 截取字符串问题!!!
- 在IIS里浏览显示"分析器错误信息: 找不到文件或程序集名称“CrystalDecisions.Web”,或找不到它的一个依赖项。"
- 关于asp.net2.0中新增login组件的问题
- 马上就要毕业了,不知道怎么写简历,请各位帮忙??介绍几个好的例子
- 求一个jquery效果
- 如何在程序的点击事件中弹出对话筐让用户选择?
- (分不够再给)ACCESS数据库表里某些记录的某个字段出现“#错误”,但是无法删除,怎么办?
- DotNetTextBox怎么配置啊出现个小问题
- 如何对服务器侦听
foreach用于遍历实现IEnumerable接口的集合的元素