使用Visual Studio在MS Access数据库中插入逗号



我正在使用Visual Studio 2019创建一个应用程序,该应用程序连接到MS Acssess数据库以添加、获取、修改和删除数据库中的值。

我愿意插入一个可以包含逗号的文本,例如:Gousse d'ail。但我知道会有一个问题,因为字符串必须用逗号包围。所以我在我愿意插入的文本中的每一个额外逗号之前都添加了一个反斜杠。

问题是收到一条错误消息,说有语法错误,我相信这是因为反斜杠。

这是我得到的信息:

System.Data.OleDb.OleDbException(0x80040E14(:查询表达式"中存在语法错误(缺少运算符(Gousse d\'ail',unite='kg',过敏原=False,fournisseurID=1,其中成分ID=40">

除非有逗号,否则一切都很好。

以下是我用来插入数据库的方法:

public void UpdateIngédient(int ingredientID, InfoIngredient ing)
{
string query = "UPDATE Ingrédients ";
query += "SET nom = '" + ing.Nom + "', unite = '" + ing.Unité + "', allergene = " + ing.Allergene + ", fournisseurID = " + ing.Fournisseur;
query += " WHERE ingredientID = " + ingredientID + ";";
OleDbCommand com = new OleDbCommand(query, oleConnection);
com.ExecuteNonQuery();
}

您的查询正在乞求SQL注入,以及与您遇到的错误完全相同的错误。

如果您正在使用SQL表(在您的情况下是OLE(,我强烈建议您花一些时间研究SQL注入,以了解风险。

防范SQL注入非常容易,下面显示了对代码的重写以防范它

void UpdateIngédient(int ingredientID, InfoIngredient ing)
{
string query = "UPDATE Ingrédients SET nom = @nom, unite = @unite, allergene = @allergene, fournisseurID = @fournisseur WHERE ingredientID = @ingredientID;";
OleDbCommand cmd = new OleDbCommand(query, oleConnection);
cmd.Parameters.Add(new OleDbParameter("@nom", ing.Nom));
cmd.Parameters.Add(new OleDbParameter("@unite", ing.Unité));
cmd.Parameters.Add(new OleDbParameter("@allergene", ing.Allergene));
cmd.Parameters.Add(new OleDbParameter("@fournisseur", ing.Fournisseur));
cmd.Parameters.Add(new OleDbParameter("@ingredientID", ingredientID));
OleDbCommand com = new OleDbCommand(query, oleConnection);
com.ExecuteNonQuery();
}

这应该防止";出乎意料的";字符串中的字符,如'字符

最新更新