如何使用OleDb删除数据库数据

kq9yhe63 2009-12-25 04:38:56
这段代码运行到
thisAdapter.Update(thisDataSet, "cardno"); 时出现异常:“对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成。”

代码如下:
private void buttonDele_Click(object sender, EventArgs e)
{
f_con = "FILE NAME=" + @"c:\cshis\cs2000.udl";
thisConnect = new OleDbConnection(f_con);
thisConnect.Open();
if (thisConnect.State == System.Data.ConnectionState.Open)
{
MessageBox.Show("it's OK");
}
thisAdapter = new OleDbDataAdapter(@"select * from cardno",thisConnect);
thisComm = new OleDbCommandBuilder(thisAdapter);
thisDataSet = new DataSet();
thisAdapter.Fill(thisDataSet,"cardno");
keys = new DataColumn[1];
keys[0]=thisDataSet.Tables["cardno"].Columns["rm_num"];
thisDataSet.Tables["cardno"].PrimaryKey = keys;
thisRow = thisDataSet.Tables["cardno"].Rows.Find("4444");
if (thisRow != null)
{
thisRow.Delete();
thisAdapter.Update(thisDataSet, "cardno");
MessageBox.Show("Delete is done");
}
所有变量都是声明过的,这只是代码的一部分。

有谁能告诉我是哪里写错了导致的这个异常么?
...全文
206 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
古今多少事 2009-12-25
  • 打赏
  • 举报
回复
VB.NET的代码:
……
Dim MyCommand As OleDbCommand
MyCommand = New OleDbCommand("DELETE from cardno where rm_num='4444'", MyConnection)
MyCommand.ExecuteNonQuery()
kq9yhe63 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yczf1836 的回复:]
"delete cardno where rm_num='4444' "这句话在数据库里可以执行吗?
Oracle是要 delete from
[/Quote]

可以执行

我的问题是 就上面那段代码来说:
在所对应的数据库表中没有设置主键的情况下 我想用c#编写一段代码,来实现sql中的
delete cardno where rm_num='4444'
应该如何写?
十八道胡同 2009-12-25
  • 打赏
  • 举报
回复
thisAdapter.Update(thisDataSet, "cardno"); 时出现异常:“对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成。”

你的SelectCommand要有返回值。
yczf1836 2009-12-25
  • 打赏
  • 举报
回复
"delete cardno where rm_num='4444' "这句话在数据库里可以执行吗?
Oracle是要 delete from
  • 打赏
  • 举报
回复
[Quote=引用楼主 kq9yhe63 的回复:]
keys = new DataColumn[1];
keys[0]=thisDataSet.Tables["cardno"].Columns["rm_num"];
thisDataSet.Tables["cardno"].PrimaryKey = keys;
[/Quote]

他已经指定主键了
kq9yhe63 2009-12-25
  • 打赏
  • 举报
回复
我想问的是如果cardno表 没有主键的话 这段代码怎么改
xinbin1122 2009-12-25
  • 打赏
  • 举报
回复
把rm_num设置成主键试试?
kq9yhe63 2009-12-25
  • 打赏
  • 举报
回复
这通常发生在数据库表没有主键列时,或 SELECT 命令使用 JOINS 时。

cardno 表确实没有主键

问:那我如果想做 delete cardno where rm_num='4444' 的操作的话 这段代码应该怎么改?
古今多少事 2009-12-25
  • 打赏
  • 举报
回复
有主键吗?设置主键试试。

111,123

社区成员

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

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

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