【发布时间】:2018-02-19 10:25:11
【问题描述】:
string SqlStr = string.Format("insert into O_Tracker " +
"(order_id,client_name,job_name,note_,s_date,e_date,paid,pickup_status,sub_orders) values " +
"({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')"
,s.Order_Id, s.Client_Name, s.Job_Name, s.Note, s.Start_Date,
s.End_Date, s.Paid, s.Ready2Pickup, subOrdersPath);
我不断从调试器中收到此错误:
查询表达式中的语法错误(缺少运算符)
我只是想不通这里出了什么问题。 提前感谢您的帮助。
更新: 我已将代码更改为带参数的格式,并出现“不匹配条件表达式访问”错误。
string SqlStr ="insert into O_Tracker " +
"(order_id,client_name,job_name,note_,s_date,e_date,paid,pickup_status,sub_orders) values(@order_id,@client_name,@job_name,@note_,@s_date,@e_date,@paid,@pickup_status,@sub_orders)";
OleDbCommand cmd = new OleDbCommand();
cmd.Parameters.AddWithValue("@order_id", s.Order_Id);
cmd.Parameters.AddWithValue("@client_name", s.Client_Name);
cmd.Parameters.AddWithValue("@job_name", s.Job_Name);
cmd.Parameters.AddWithValue("@note_", s.Note);
cmd.Parameters.AddWithValue("@s_date", s.Start_Date);
cmd.Parameters.AddWithValue("@e_date", s.End_Date);
cmd.Parameters.AddWithValue("@paid", s.Paid);
cmd.Parameters.AddWithValue("@pickup_status", s.Ready2Pickup);
cmd.Parameters.AddWithValue("@sub_orders", subOrdersPath);
try
{
cnn.Open();
cmd.Connection = cnn;
cmd.CommandText = SqlStr;
cmd.ExecuteNonQuery();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cnn.Close();
}
总结
将文件路径添加到特定表字段时出现问题。 这里的人注意到我的代码容易受到 SQL 注入的影响,所以我按照他们的建议完成并修复了我的代码。
之后又出现了另一个问题,由于日期字段不匹配,因此简单地修复了它。
感谢大家的帮助! :)
【问题讨论】:
-
发生异常时
SqlStr的确切值是多少? -
@mjwills
"insert into O_Tracker (order_id,client_name,job_name,note_,s_date,e_date,paid,pickup_status,sub_orders) values (1001,'Example','gssgsgsgsgs','אין הערות','19/02/2018 12:21:36','19/02/2018 12:21:36','לא','לא','C:\\Users\\SuperUser\\Dropbox\\My Project\\My Project\\bin\\Debug\\\\Orders\\1001gssgsgsgsgs.txt')" -
在 SqlCommand 中使用参数。你不应该发送这样的格式化字符串。
-
当 subOrdersPath = "'); DROP TABLE O_Tracker--" 时会发生什么? Sql 注入刚刚杀死了你的数据库!
标签: c# sql winforms visual-studio