adpater.update()问题,insert没问题,update就报错 affected 0 of the expected 1 records

gameko 2009-11-11 10:55:35
窗口只有1个datagridview和一个button1,datagidview编辑数据,button1确定更新
当插入新数据的时候,可以成功插入,当编辑现有数据update的时候,一点更新就报错。提示:“Concurrency violation: the DeleteCommand affected 0 of the expected 1 records.”
我根本不知道错在哪里了。希望指点

代码如下

public partial class FormAccess : Form
{
OleDbConnection connect = new OleDbConnection(@";Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ESDB.accdb");
DataTable dt=new DataTable ();
OleDbDataAdapter adapter;
public FormAccess()
{
InitializeComponent();
}

private void FormAccess_Load(object sender, EventArgs e)
{
connect.Open();
adapter = new OleDbDataAdapter();
string selectText = "select * from factory";
DbCommand selectCommand = new OleDbCommand(selectText, connect);
adapter.SelectCommand =(OleDbCommand ) selectCommand;
adapter.Fill(dt);
dataGridView1.DataSource = dt;
string insertText="insert into factory (factoryCode,factoryName,description) values(@factoryCode,@factoryName,@description)";
string updateText = "update factory set factoryName=@factoryname,description=@description where factoryCode=@factoryCode";
OleDbCommand insertCommand = new OleDbCommand(insertText, connect);
insertCommand.Parameters.Add("@factoryCode", OleDbType.VarWChar, 0, "factoryCode");
insertCommand.Parameters.Add("@factoryName", OleDbType.VarWChar, 0, "factoryName");
insertCommand.Parameters.Add("@description", OleDbType.VarWChar, 0, "description");

OleDbCommand updateCommand = new OleDbCommand(updateText, connect);
updateCommand.Parameters.Add("@factoryCode", OleDbType.VarWChar, 0, "factoryCode");
updateCommand.Parameters.Add("@factoryName", OleDbType.VarWChar, 0, "factoryName");
updateCommand.Parameters.Add("@description", OleDbType.VarWChar, 0, "description");

adapter.UpdateCommand = (OleDbCommand)updateCommand;
adapter.InsertCommand = (OleDbCommand)insertCommand;
}

private void button1_Click(object sender, EventArgs e)
{
adapter.Update(dt);
}

...全文
277 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gameko 2009-11-12
  • 打赏
  • 举报
回复
都不对,自己已经解决了,结贴。
lsj_zrp 2009-11-11
  • 打赏
  • 举报
回复
主键
lzsh0622 2009-11-11
  • 打赏
  • 举报
回复
ACCESS数据库,很可能是主键问题. 加上主键
nashina 2009-11-11
  • 打赏
  • 举报
回复
adapter.Fill(dt,"factory");
wuyq11 2009-11-11
  • 打赏
  • 举报
回复
违反并发性: DeleteCommand 影响了预期1 条记录中的0 条
Update(ds);
ds.AcceptChanges();
检查是否设有主键
DeleteCommand的问题:检查是否含有自动编号字段
UpdateCommand的问题:检查更新的字段的原始值是否为空值
http://topic.csdn.net/u/20070729/11/9ff501ec-139c-48de-8707-0e2c69327674.html
wangminqi 2009-11-11
  • 打赏
  • 举报
回复
把更新语句的参数改一下试试,加"@Original_"
update factory set factoryName=@factoryname,description=@description where factoryCode=@Original_factoryCode";

http://www.mybuffet.cn
gameko 2009-11-11
  • 打赏
  • 举报
回复
批量更新当然是只有1个button 啊。不会每个列都会放
lee_b 2009-11-11
  • 打赏
  • 举报
回复
一楼,,你的那东西真大。。羡慕啊。。
sharp_future 2009-11-11
  • 打赏
  • 举报
回复
更新应该是更新对应的数据

你的button是放在每一列里面的 每一列后面有个Button?
这样的话你的button估计要在DataItemBoud里面写了
最好是用linkbutton
lzsh0622 2009-11-11
  • 打赏
  • 举报
回复
insert 时 factoryCode 你怎么处理的,如果不是自增列,应该赋值,否则主键为空出错.

insert 到数据库的(自增)主键,返回到DataTable中,否则更新时主键没有对应关系.

110,538

社区成员

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

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

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