插入带有文件路径的语句

时间:2018-02-19 10:25:12

标签: c# sql winforms visual-studio

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);

我一直从调试器中得到这个错误:

  

查询表达式中的语法错误(缺少运算符)

我无法弄清楚这里有什么问题。 谢谢你的帮助。

更新 我已经将代码更改为带参数的格式,并且出现“mismatch criteria expression access”错误。

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注入的攻击,所以我已经完成了他们的建议并修复了我的代码。

之后发生了另一个问题并且只是修复它,因为日期字段不匹配。

谢谢大家的帮助! :)

1 个答案:

答案 0 :(得分:2)

看起来您的字符串')'被视为一个单独的字符串:

1001gssgsgsgsgs.txt')'

话虽如此,正如评论中所说,你必须使用SqlParameters。两者都是为了防止Sql注入和分隔你的字符串。像这样:

SqlCommand command = new SqlCommand('insert into ... values (..., @sub_order)', connection);
command.Parameters.Add("@sub_order", yourSubOrderString);