尝试将C#中的变量插入MySQL时出错

时间:2014-01-31 16:59:45

标签: c# mysql string

这是我用于将值插入数据库的代码。

public void callSQL(string partNumber, string total, string numOfPacks, string dunsNumber,   string serialNumber, string laneNumber)

    {

 MySqlConnection myConnection = new MySqlConnection("SERVER=localhost;DATABASE=testing;UID=root;PASSWORD=********;");

        try
        {
            myConnection.Open();
            Console.WriteLine(laneNumber);
            MySqlCommand myCommand = new MySqlCommand("INSERT INTO test (Part_Number, total, number_of_packs, dunsNumber, serialNumber, truck_number) VALUES (" + partNumber +","+total+","+numOfPacks+","+dunsNumber+","+serialNumber+","+laneNumber+")", myConnection);
            myCommand.ExecuteNonQuery();
            Console.Write("Done");
            myConnection.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

发生的事情真的很奇怪。我得到的问题是使用l​​aneNumber变量。这是我从控制台读取的字符串。

 Console.WriteLine("Please enter the date and lane number like so: ddmmyylanenumber.");
        string lanenum = Console.ReadLine();

然而,只有当它是所有数字时才会输入到数据库中。在那里有一个角色的那一刻,我无法在数据库中输入任何内容。当我手动将变量更改为字符串时,它可以工作,但是当我使用带有字符的变量时,它不起作用。我得到的错误是:

“MySQL.Data.MySqlClient.MySqlExectipn(0x8004005):'字段列表'中的未知列'whatever_i_entered_into_console'

编译器抱怨的行是myCommand.ExectueNonQuery();行。

希望这是足够的信息。 感谢您的帮助。

修改 truck_number是一个VARCHAR。

2 个答案:

答案 0 :(得分:3)

您提到的评论中提到truck_number列是VARCHAR类型。

问题:您没有将字符串值lane_number括在单引号中。

解决方案:您需要将VARCHAR类型的字符串值括在单引号中以便正确发送它们:

试试这个:(我不建议这样做)

MySqlCommand myCommand = new MySqlCommand("INSERT INTO test (Part_Number, total, number_of_packs, dunsNumber, serialNumber, truck_number) VALUES (" + partNumber +","+total+","+numOfPacks+","+dunsNumber+","+serialNumber+",'"+laneNumber+"')", myConnection);

建议:您的INSERT INTO声明对SQL Injection Attacks开放。所以我建议你使用Parameterised queries来避免它们。

当您使用parameterised queries时,相应的类型将被正确发送,因此您甚至不需要在发送字符串值时使用单引号。

使用参数化查询:

MySqlCommand myCommand = new MySqlCommand("INSERT INTO test (Part_Number, total, number_of_packs, dunsNumber, serialNumber, truck_number) VALUES (@Part_Number,@total,@number_of_packs,@dunsNumber,@serialNumber,@truck_number)", myConnection);
myCommand.Parameters.AddWithValue("@Part_Number",partNumber);
myCommand.Parameters.AddWithValue("@total",total);
myCommand.Parameters.AddWithValue("@number_of_packs",numOfPacks);
myCommand.Parameters.AddWithValue("@dunsNumber",dunsNumber);
myCommand.Parameters.AddWithValue("@serialNumber",serialNumber);
myCommand.Parameters.AddWithValue("@truck_number",laneNumber);
myCommand.ExecuteNonQuery();

答案 1 :(得分:1)

  

确保columnNames正确

尝试类似

 MySqlCommand myCommand = new MySqlCommand("INSERT INTO test VALUES('" + partNumber +"','"+total+"','"+numOfPacks+"','"+dunsNumber+"','"+serialNumber+"','"+laneNumber+"')", myConnection);