c# - 为什么我的 C# 中的 SQL 代码不起作用?

标签 c# sql database visual-studio visual-studio-2015

我编写了一个 SQL 命令来将一些项目保存在我的数据库中。但是当我运行它时,它给出了一条错误消息:

enter image description here

这是我的代码:

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);

有人可以帮我解决这个问题吗?我想不通。

最佳答案

  1. 使用参数化查询,不使用字符串连接。这是为了防止 sql 注入(inject)攻击,但也会出现值错误,例如忘记确保转义字符串(例如,如果字符串包含 ')。
  2. 如果您有多个查询,每个唯一参数值都应该有自己的参数名称/值
  3. 将您的 ado.net 数据库类型(SqlConnection、SqlCommand 等)包装在 using block 中(如果它们是一次性的)
  4. 切勿将连接重用为全局对象,在需要时创建、使用和销毁它们。

这是包含 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/

相关文章:

sql - 如何在 linux shell 上的 sql 查询中使用 "%"字符?

ruby-on-rails - 错误 : permission denied for relation after Heroku pg_dump and import to development database

SQL ORA-01722 : invalid number

sql - 奇怪的 ORDER BY 要求

mysql - Hibernate建表不成功,sql语法错误

sql-server - 将多个子表关联到一个父表

c# - 方法 - 32 位与 try-catch 以及 iSeries ODBC 驱动程序

c# - 如何在 WebBrowser 中使用 WebView.postUrl()

c# - 在 EventStore 中搜索流

c# - 如何在 Deedle 框架中将值从 <string> 转换为 <double> 类型?