你好这一切似乎都是我的问题 我在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();
布伦特
答案 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语句将值提供给数据库。
虽然可以只是添加引号,但绝对不应该这样做。错误的数据(无论是故意恶意还是非恶意变量a
和b
都可能是一个严重的安全风险。只是不要这样做。
您 还需要将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 ......