c#插入mysql多个变量

时间:2012-03-22 20:53:33

标签: c# mysql

你好这一切似乎都是我的问题 我在mysql中有一个表,在尝试插入时我正在创建一个c#app我得到了一个你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行(我的companyVal)的“OIL COMPANY”附近使用正确的语法。它将为所有其他值插入一个值和一个默认值,但我添加了第二个错误值

        string ConnectionString2 = ConfigurationSettings.AppSettings["ConnectionString2"];
        MySqlConnection connection2;
        connection2 = new MySqlConnection(ConnectionString2);
        connection2.Open();
        MySqlCommand command = new MySqlCommand("INSERT INTO spt_proposal     (lab_Prop_Id,customer_Name) VALUE (" + a + "," + companyVal + ")", connection2);
        command.ExecuteNonQuery();
        connection2.Close();

布伦特

4 个答案:

答案 0 :(得分:5)

不要这样做:

// I split the line
MySqlCommand command =
    new MySqlCommand("INSERT INTO spt_proposal lab_Prop_Id,customer_Name) "
        "VALUE (" + a + "," + companyVal + ")", connection2);

这使您最开启SQL injection attacks,并通过混合代码和数据使代码更难理解,并导致转换的潜在问题(特别是日期和时间)。

而是使用参数化SQL语句将值提供给数据库。

虽然可以只是添加引号,但绝对不应该这样做。错误的数据(无论是故意恶意还是非恶意变量ab都可能是一个严重的安全风险。只是不要这样做。

还需要将VALUE更改为VALUES,但我只会在转移到参数化SQL后执行。哦,并使用using语句自动处理命令和连接,因此如果抛出异常,您不会泄漏资源。

答案 1 :(得分:1)

您的字符串中缺少引号,VALUE应为VALUES

string sql = "INSERT ... VALUES ('" + a + "','" + companyVal + "')";

另外,我建议您使用参数化查询。

答案 2 :(得分:0)

在这里猜测,customer_Name列是字符串/文本列吗?我对mySQL没有多少经验,但SQL Server字符串总是必须用ticks(')包围。所以这样的事情可能有用:

INSERT INTO spt_proposal     (lab_Prop_Id,customer_Name) VALUE (" + a + ",'" + companyVal + "')", connection2);

然而,这通常被认为是“糟糕的形式”,而稍微更好的选择是使用String.Format甚至(更多)更好的参数化SQL。

答案 3 :(得分:0)

将您的command文字更改为parameterized

var commandText = "INSERT INTO spt_proposal(lab_Prop_Id,customer_Name)" +
  " VALUES(?lab, ?cust)";

var command = new MySqlCommand(commandText, connection2);
command.Parameters.Add("?lab", MySqlDbType.VarChar, 80).Value = a;
command.Parameters.Add("?cust", MySqlDbType.VarChar, 80).Value = companyVal;

command.ExecuteNonQuery();

我疯狂地假设字段类型是varchar(80),lol ......