我将使用C#实现Window应用程序的数据库访问层。数据库(.accdb)位于项目文件中。当涉及通过交换机连接到一个访问数据库的两个笔记本(客户端)时,它会抛出DBConcurrency异常错误。我的目标是检查首先执行的sql的时间戳,然后运行sql。 你能否为我提供一些指导方针来实现这一目标?
以下是我的代码
protected void btnTransaction_Click(object sender, EventArgs e)
{
string custID = txtID.Text;
string CompName = txtCompany.Text;
string contact = txtContact.Text;
string city = txtCity.Text;
string connString = ConfigurationManager.ConnectionStrings["CustomersDatabase"].ConnectionString;
OleDbConnection connection = new OleDbConnection(connString);
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
OleDbTransaction transaction = connection.BeginTransaction();
command.Transaction = transaction;
try
{
command.CommandText = "INSERT INTO Customers(CustomerID, CompanyName, ContactName, City, Country) VALUES(@CustomerID, @CompanyName, @ContactName, @City, @Country)";
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@CustomerID", custID);
command.Parameters.AddWithValue("@CompanyName", CompName);
command.Parameters.AddWithValue("@ContactName", contact);
command.Parameters.AddWithValue("@City", city);
command.ExecuteNonQuery();
command.CommandText = "UPDATE Customers SET ContactName = @ContactName2 WHERE CustomerID = @CustomerID2";
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@CustomerID2", custIDUpdate);
command.Parameters.AddWithValue("@ContactName2", contactUpdate);
command.ExecuteNonQuery();
adapter.Fill(table);
GridView1.DataSource = table;
GridView1.DataBind();
transaction.Commit();
lblMessage.Text = "Transaction successfully completed";
}
catch (Exception ex)
{
transaction.Rollback();
lblMessage.Text = "Transaction is not completed";
}
finally
{
connection.Close();
}
}
答案 0 :(得分:1)
我注意到了几件事:
您的INSERT CommandText指定了@Country
参数,但您没有向.Parameters
集合添加相应的参数。
您尝试通过更改CommandText并添加更多参数来重新使用command
对象进行更新,但是您没有从INSERT中删除以前的参数,所以可能它们是仍然存在,这肯定会混淆UPDATE命令。
您以错误的顺序指定UPDATE参数。 ACE.OLEDB 忽略参数名称,因此参数必须以{em>完全顺序添加到.Parameters
集合中,并显示在CommandText中。
我也很困惑:
为什么在尝试绑定GridView之前不提交事务,
为什么你需要一个交易,因为INSERT和UPDATE似乎是无关的。