我正在尝试将作为交易的一部分购买的每本书籍的可用量减少一本书-我在数据库中有50本书的记录。
P.S。我知道SQL注入-我会解决这个问题。
下面的代码显示了在DB中插入的新交易记录-我要实现的是,当在DB中插入新记录时,购买的书减少了“ 1”的可用性。
private void btnPay_Click(object sender, EventArgs e)
{
string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename= C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\Library System Project.mdf ;Integrated Security=True;Connect Timeout=30";
string Query = "insert into BookSale_Transactions (CustomerID, BookISBN, DateSold) values ('" + this.txtCustomerID.Text.Trim() + "','" + this.cbBookName.SelectedValue + "','" + this.msktxtDateSold.Text.Trim() + "');";
SqlConnection DBCon = new SqlConnection(ConnectionString);
SqlCommand DBCommand = new SqlCommand(Query, DBCon);
SqlDataReader DBReader;
try
{
DBCon.Open();
DBReader = DBCommand.ExecuteReader();
MessageBox.Show("New transaction record added to the system.", "Library System", MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
DBCon.Close();
this.txtCustomerID.ResetText();
}
}
答案 0 :(得分:0)
这是一个SQL问题,而不是c#问题,但是您可以通过两种方法解决此问题:
首先将使用存储过程进行2笔交易,其中1笔用于插入图书销售交易,另一笔用于更新表,其中保存了有关图书的信息,从而从计数项目中删除了1笔。由于是存储过程,因此这似乎是最好且更安全的
第二种方法是有2个查询,一个用于插入,一个用于更新,并为两个查询执行阅读器。这不太安全,但是可以通过c#
提供了我的答案,我强烈建议您研究“存储过程”。
编辑:这是您进行交易的方式
SqlTransaction tran;
try
{
DBCon.Open();
tran = DBCon.BeginTransaction();
DBReader = DBCommand.ExecuteReader();
DBReader2 = DbCommand2.ExecuteNonQuery();
MessageBox.Show("New transaction record added to the system.", "Library System", MessageBoxButtons.OK);
tran.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}