这是我用于将值插入数据库的代码。
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());
}
}
发生的事情真的很奇怪。我得到的问题是使用laneNumber变量。这是我从控制台读取的字符串。
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。
答案 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);