c# 删除DataTable中的某一行,但是无法在数据库中更新

编程小狂人 2013-03-07 03:18:58
 public void DataBaseDelete(string FieldName, string FieldValue, string DataTableName)
{
if (this.OleDbCommandString != null && this.ConnectionString != null)
{
MyConnection = new OleDbConnection(_ConnectionString);
MyDataAdapter = new OleDbDataAdapter(_OleDbCommandString, MyConnection);

MyDataSet = new DataSet();
MyDataAdapter.Fill(MyDataSet, DataTableName);

MyDataTable = MyDataSet.Tables[DataTableName];
DataRow[] Dr = MyDataTable.Select(FieldName + "=" + FieldValue);
if (Dr.Length > 0)
{
foreach (DataRow Dr1 in Dr)
{
MyDataTable.Rows.Remove(Dr1);
}
}
try
{

MyDataAdapter.Update(MyDataSet, DataTableName);
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

}
else
{
MessageBox.Show("您没有设置OleDbCommandString和ConnectionString属性", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}


我设置断点调试,DataTable中的删除了,但是往数据库更新不了啊,是不是缺少什么啊
...全文
725 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
林子的传智 2013-03-10
  • 打赏
  • 举报
回复
//数据更新到数据库 SqlDataAdapter sda =new SqlDataAdapter(); SqlCommandBuilder scb = new SqlCommandBuilder(sda); sda.Update(ds); 用SqlDataAdapter这个类的对象的Update方法就可以更新到数据库了
编程小狂人 2013-03-08
  • 打赏
  • 举报
回复
引用 11 楼 xiongxyt2 的回复:
DataTable是缓存在内存里面的,你删除他当然没有删除数据库里面的东西了 在应该是删除DataTable的方法里面用ado.net删除数据库里面的数据之后,重新绑定数据
还要重新绑定?怎么绑定啊,用DataAdapter.Fill()方法吗
xiongxyt2 2013-03-08
  • 打赏
  • 举报
回复
DataTable是缓存在内存里面的,你删除他当然没有删除数据库里面的东西了 在应该是删除DataTable的方法里面用ado.net删除数据库里面的数据之后,重新绑定数据
编程小狂人 2013-03-08
  • 打赏
  • 举报
回复
引用 8 楼 qldsrx 的回复:
可以自动生成SQL语句,不过我一般不会这么做,因为你编写代码的时候看不到生成的语句,万一语句有问题,你根本无从知晓。可以直接在查询管理器里面,鼠标右键点击表名,让它帮你创建插入、更新、删除语句,之后微调,复制到C#里面赋值给Command。如果那个语句含有不少不规范的字符,没关系,写个正则批量替换下即可,我就写过一个正则,需要的话,表达式可以给你。
能给一下表达式吗?
superwang_75 2013-03-08
  • 打赏
  • 举报
回复
直接sql语句删除 public int SetData(string StrSql) { int res = -1; try { SqlOleCon.Open(); SqlOleCmd = new OleDbCommand(StrSql, SqlOleCon); SqlOleCmd.ExecuteNonQuery(); SqlOleCon.Close(); res = 0; } catch(Exception er) { SqlOleCon.Close(); } return res; }
编程小狂人 2013-03-08
  • 打赏
  • 举报
回复
引用 13 楼 nice_fish 的回复:
引用 10 楼 ygy597441072 的回复:引用 8 楼 qldsrx 的回复:可以自动生成SQL语句,不过我一般不会这么做,因为你编写代码的时候看不到生成的语句,万一语句有问题,你根本无从知晓。可以直接在查询管理器里面,鼠标右键点击表名,让它帮你创建插入、更新、删除语句,之后微调,复制到C#里面赋值给Command。如果那个语句含有不少不规范的字符,没关系,写个正……
恩,明白了
  • 打赏
  • 举报
回复
引用 10 楼 ygy597441072 的回复:
引用 8 楼 qldsrx 的回复:可以自动生成SQL语句,不过我一般不会这么做,因为你编写代码的时候看不到生成的语句,万一语句有问题,你根本无从知晓。可以直接在查询管理器里面,鼠标右键点击表名,让它帮你创建插入、更新、删除语句,之后微调,复制到C#里面赋值给Command。如果那个语句含有不少不规范的字符,没关系,写个正则批量替换下即可,我就写过一个正则,需要的话,表达……
你删除的只是内存中的,具体需要操作数据库,那还要写sql语句进行操作。
搬砖的码农 2013-03-07
  • 打赏
  • 举报
回复
哦,这个我知道,我还以为你说CommandBuilder自己有生成sql语句;VS好多控件都能直接通过点击来连接数据库,不过这个自己生成的会有很多不需要的代码,我通常都是自己写,有问题也好调
qldsrx 2013-03-07
  • 打赏
  • 举报
回复
可以自动生成SQL语句,不过我一般不会这么做,因为你编写代码的时候看不到生成的语句,万一语句有问题,你根本无从知晓。可以直接在查询管理器里面,鼠标右键点击表名,让它帮你创建插入、更新、删除语句,之后微调,复制到C#里面赋值给Command。如果那个语句含有不少不规范的字符,没关系,写个正则批量替换下即可,我就写过一个正则,需要的话,表达式可以给你。
编程小狂人 2013-03-07
  • 打赏
  • 举报
回复
引用 6 楼 zhurcn 的回复:
用CommandBuilder能自动生成SQL语句吗?好久没用过CommandBuilder,不清楚!!
额,那你一般是不是用SQL语句来更新啊
搬砖的码农 2013-03-07
  • 打赏
  • 举报
回复
用CommandBuilder能自动生成SQL语句吗?好久没用过CommandBuilder,不清楚!!
编程小狂人 2013-03-07
  • 打赏
  • 举报
回复
引用 3 楼 zhurcn 的回复:
MyDataTable.Rows.Remove 是移除MyDataTable表的数据而对数据库没影响;要想对数据库操作就要执行对应的SQL语句
我这样理解对吗?
编程小狂人 2013-03-07
  • 打赏
  • 举报
回复
引用 3 楼 zhurcn 的回复:
MyDataTable.Rows.Remove 是移除MyDataTable表的数据而对数据库没影响;要想对数据库操作就要执行对应的SQL语句
OK,明白,想问一下,是不是只要想修改数据库必须要用SQL语句,如果使用DataTable的更改来更新数据库的话,同样也要使用SQL语句,是不是可以通过CommandBuilder来自动生成SQL语句,也可以用DataAdapter的四个Command来手动添加啊
搬砖的码农 2013-03-07
  • 打赏
  • 举报
回复
MyDataTable.Rows.Remove 是移除MyDataTable表的数据而对数据库没影响;要想对数据库操作就要执行对应的SQL语句
编程小狂人 2013-03-07
  • 打赏
  • 举报
回复
引用 1 楼 qldsrx 的回复:
不能用Remove,那个不是删除,是直接移除,删除必须调用DataRow的Delete方法
哦,这样啊,非常感谢啊,这个需不需要DeleteCommand? 还有我更新的时候不使用DeleteCommand,是不是必须要CommandBuilder
qldsrx 2013-03-07
  • 打赏
  • 举报
回复
不能用Remove,那个不是删除,是直接移除,删除必须调用DataRow的Delete方法

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧