public void moveBooks(int quantityOfMovedBooks, int booksID)
{
int finalQuantityOfBooks = totalBooksInDB(booksID) - quantityOfMovedBooks;
queryString = "update Books set bQuantity='" + finalQuantityOfBooks + "'where bID=" + booksID;
myComm = new OleDbCommand(queryString, myConn);
myConn.Open();
myComm.ExecuteNonQuery();
myConn.Close();
}
public int totalBooksInDB(int bID)
{
int booksQuantity;
queryString = "select bQuantity from Books where bID=" + bID;
myComm = new OleDbCommand(queryString, myConn);
myConn.Open();
booksQuantity = (int)myComm.ExecuteScalar();
myConn.Close();
return booksQuantity;
}
我是 MSAccess 数据库和 C# 的初学者,我维护了一个表,其中有 3 个字段,一个是 BookID,第二个是 BookName,第三个是 BookQuantity。这种方法..但我想知道有没有更好或有效的方法来做到这一点..
提前谢谢
最佳答案
一些变化。
第一 , 永远不要使用字符串连接来构建 sql 命令文本。这导致 sql injection攻击。一个非常严重的安全问题
第二 ,您获取书籍数量的代码可能会导致 ExecuteScalar 返回空值,因此您将收到错误
第三 .连接应在需要时打开,使用,然后关闭和处理。如果由于某种原因出现异常,您的代码将无法关闭并处理连接。
using statement防止出现此问题,注意关闭和处理连接,以防万一。
第四 嗯,这更像是一个逻辑问题。我认为您移动的书籍不能超过库存中存储的书籍,因此为了安全起见,请添加支票-
public void moveBooks(int quantityOfMovedBooks, int booksID)
{
int quantity = totalBooksInDB(booksID);
if(quantity > quantityOfMovedBooks)
{
int finalQuantityOfBooks = quantity - quantityOfMovedBooks;
queryString = "update Books set bQuantity=? where bID=?";
using ( OleDbConnection myConn = new OleDbConnection(GetConnectionString() )
using ( OleDbCommand myComm = new OleDbCommand(queryString, myConn))
{
myComm.Parameters.AddWithValue("@p1", finalQuantityOfBooks);
myComm.Parameters.AddWithValue("@p2", booksID);
myConn.Open();
myComm.ExecuteNonQuery();
}
}
else
MessageBox.Show("Invalid quantity to move");
}
public int totalBooksInDB(int bID)
{
int booksQuantity = 0;
queryString = "select bQuantity from Books where bID=?";
using ( OleDbConnection myConn = new OleDbConnection(GetConnectionString() )
using ( OleDbCommand myComm = new OleDbCommand(queryString, myConn))
{
myComm = new OleDbCommand(queryString, myConn);
myComm.Parameters.AddWithValue("@p1", bID);
myConn.Open();
object result = myComm.ExecuteScalar();
if(result != null)
booksQuantity = Convert.ToInt32(result);
}
return booksQuantity;
}
关于c# - 在 Ms Access 数据库中的特定记录上应用运算符的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15819669/