gpt4 book ai didi

c# - 并发冲突 : the UpdateCommand affected 0 of the expected 1 records

转载 作者:太空狗 更新时间:2023-10-29 18:30:32 27 4
gpt4 key购买 nike

这是代码,我为什么会收到这个错误有什么想法吗?

private SQLiteDataAdapter DA_Webfiles;
// Setup connection, fill dataset etc

DataTable dt = this.dataSet.Tables["WEBFILES"];
DataRow newRow = dt.NewRow();
newRow["PATH"] = _url;
dt.Rows.Add(newRow);
this.DA_Webfiles.Update(this.dataSet, "WEBFILES");
// Works to Here

newRow["CONTENT_TYPE"] = "Test Content Type";
this.DA_Webfiles.Update(this.dataSet, "WEBFILES");
// Get ERROR here - Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

最佳答案

你需要:dataAdapter.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

在这里获得代码线索:Retrieving Identity or Autonumber Values (ADO.NET)

表格:

CREATE TABLE [emp] (
[emp_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[emp_firstname] VARCHAR(100) NOT NULL,
[emp_lastname] varchar(100) not null
)

代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();


var c = Connect();

var da = new SQLiteDataAdapter("select emp_id, emp_firstname, emp_lastname from emp where 1 = 0", c);



var b = new SQLiteCommandBuilder(da);

da.InsertCommand = new SQLiteCommand(
@"insert into emp(emp_firstname, emp_lastname ) values(:_emp_firstname, :_emp_lastname);
select emp_id /* include rowversion field here if you need */ from emp where emp_id = last_insert_rowid();", c);
da.InsertCommand.Parameters.Add("_emp_firstname", DbType.String, 0, "emp_firstname");
da.InsertCommand.Parameters.Add("_emp_lastname", DbType.String, 0, "emp_lastname");
da.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

da.UpdateCommand = b.GetUpdateCommand();
da.DeleteCommand = b.GetDeleteCommand();


var dt = new DataTable();
da.Fill(dt);

var nr = dt.NewRow();
nr["emp_firstname"] = "john";
nr["emp_lastname"] = "lennon";

dt.Rows.Add(nr);

da.Update(dt);

dt.AcceptChanges();

nr["emp_lastname"] = "valjean";
da.Update(dt);

}

SQLiteConnection Connect()
{
return new SQLiteConnection(@"Data Source=../../test.s3db;Version=3;");
}
}

上面的代码也适用于多插入。概念验证代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();


var c = Connect();

var da = new SQLiteDataAdapter("select emp_id, emp_firstname, emp_lastname from emp where 1 = 0", c);



var b = new SQLiteCommandBuilder(da);

da.InsertCommand = new SQLiteCommand(
@"insert into emp(emp_firstname, emp_lastname ) values(:_emp_firstname, :_emp_lastname);
select emp_id /* include rowversion field here if you need */ from emp where emp_id = last_insert_rowid();", c);
da.InsertCommand.Parameters.Add("_emp_firstname", DbType.String, 0, "emp_firstname");
da.InsertCommand.Parameters.Add("_emp_lastname", DbType.String, 0, "emp_lastname");
da.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

da.UpdateCommand = b.GetUpdateCommand();
da.DeleteCommand = b.GetDeleteCommand();


var dt = new DataTable();
da.Fill(dt);

var nr = dt.NewRow();
nr["emp_firstname"] = "john";
nr["emp_lastname"] = "lennon";


var nrx = dt.NewRow();
nrx["emp_firstname"] = "paul";
nrx["emp_lastname"] = "mccartney";


dt.Rows.Add(nr);
dt.Rows.Add(nrx);

da.Update(dt);

dt.AcceptChanges();


nrx["emp_lastname"] = "simon";
da.Update(dt);

nr["emp_lastname"] = "valjean";
da.Update(dt);

}

SQLiteConnection Connect()
{
return new SQLiteConnection(@"Data Source=../../test.s3db;Version=3;");
}
}

关于c# - 并发冲突 : the UpdateCommand affected 0 of the expected 1 records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1599230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com