我编写了一个 SQL 命令来将一些项目保存在我的数据库中。但是当我运行它时,它给出了一条错误消息:
这是我的代码:
public void Opslaan(string titel, string rVoornaam, string rAchternaam, decimal beoordeling, string a1Voornaam, string a1Achternaam, string a2Voornaam, string a2Achternaam, string a3Voornaam, string a3Achternaam)
{
if (beoordelingBest < beoordeling)
{
titelBest = titel;
beoordelingBest = beoordeling;
}
string queryString = "INSERT INTO Films (titel, beoordeling) VALUES('" + titel + "', " + beoordeling + ");" +
"INSERT INTO Acteurs (voornaam, achternaam, FilmID) VALUES('" + a1Voornaam + "' , '" + a1Achternaam + "', (SELECT FilmID from Films where titel = '" + titel + "'));" +
"INSERT INTO Acteurs (voornaam, achternaam, FilmID) VALUES('" + a2Voornaam + "' , '" + a2Achternaam + "', (SELECT FilmID from Films where titel = '" + titel + "'));" +
"INSERT INTO Acteurs (voornaam, achternaam, FilmID) VALUES('" + a3Voornaam + "' , '" + a3Achternaam + "', (SELECT FilmID from Films where titel = '" + titel + "'));" +
"INSERT INTO Regisseurs (voornaam, achternaam, FilmID) VALUES('" + rVoornaam + "' , '" + rAchternaam + "', (SELECT FilmID from Films where titel = '" + titel + "'));";
command = new SqlCommand(queryString, con);
有人可以帮我解决这个问题吗?我想不通。
最佳答案
- 使用参数化查询,不使用字符串连接。这是为了防止 sql 注入(inject)攻击,但也会出现值错误,例如忘记确保转义字符串(例如,如果字符串包含
'
)。 - 如果您有多个查询,每个唯一参数值都应该有自己的参数名称/值
- 将您的 ado.net 数据库类型(SqlConnection、SqlCommand 等)包装在
using
block 中(如果它们是一次性的) - 切勿将连接重用为全局对象,在需要时创建、使用和销毁它们。
这是包含 1 条语句的更新代码,您可以向其附加其他语句并根据需要添加更多参数。
var query = "INSERT INTO Acteurs (voornaam, achternaam, FilmID) SELECT @a1Voornaam, @a1Achternaam, FilmID from Films WHERE titel = @title";
using(var con = new SqlConnection("connection string here"))
using(var command = new SqlCommand(queryString, con))
{
command.Parameters.Add(new SqlParameter("@a1Voornaam", SqlDbType.VarChar){Value = a1Voornaam});
command.Parameters.Add(new SqlParameter("@achternaam", SqlDbType.VarChar){Value = achternaam});
command.Parameters.Add(new SqlParameter("@title", SqlDbType.VarChar){Value = title});
con.Open();
command.ExecuteNonQuery();
}
关于c# - 为什么我的 C# 中的 SQL 代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825019/