C# Insert into语句的文件路径

C# Insert into语句的文件路径,c#,sql,winforms,visual-studio,C#,Sql,Winforms,Visual Studio,我一直从调试器中获取此错误: 查询表达式中的语法错误(缺少运算符) 我就是不知道这里出了什么问题。 提前谢谢你的帮助 更新: 我已将代码更改为带有参数的格式,并出现“不匹配条件表达式访问”错误 string SqlStr=“插入O_跟踪器”+ “(订单id、客户名称、作业名称、备注、s_日期、e_日期、已付、提货状态、子订单)值(@order_id、@client_name、@job_名称、@note_日期、@s_日期、@e_日期、@paid、@picku状态、@sub_订单)” 摘要 向特定表

我一直从调试器中获取此错误:

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

我就是不知道这里出了什么问题。 提前谢谢你的帮助

更新: 我已将代码更改为带有参数的格式,并出现“不匹配条件表达式访问”错误

string SqlStr=“插入O_跟踪器”+
“(订单id、客户名称、作业名称、备注、s_日期、e_日期、已付、提货状态、子订单)值(@order_id、@client_name、@job_名称、@note_日期、@s_日期、@e_日期、@paid、@picku状态、@sub_订单)”

摘要

向特定表字段添加文件路径时出现问题。 这里的人注意到我的代码容易受到SQL注入的攻击,所以我按照他们的建议做了,并修复了我的代码

之后出现了另一个问题,并简单地修复了它,因为日期字段不匹配


谢谢大家的帮助!:)

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

1001Gssgs.txt')”
也就是说,正如评论中所说,您必须使用SqlParameters。既可以防止Sql注入,也可以分隔字符串。大概是这样的:

SqlCommand=newsqlcommand('insert into…values(…,@sub_order'),连接);
添加(“@sub_order”,yourSubOrderString);

发生异常时,
SqlStr的确切值可能重复?@mjwills
“插入O_跟踪器(订单id、客户名称、工作名称、备注、s_日期、e_日期、已付款、收货状态、子订单)值(1001、'Example'、'gssgs'、'19/02/2018 12:21:36'、'19/02/2018 12:21:36'、'19/02/2018 12:21:36'、'C:\\Users\\SuperUser\\Dropbox\\myproject\\myproject\\bin\\Debug\\\\Orders\\1001Gssgsgs.txt')、'C:\\Users\\SuperUser\\Dropbox\\myproject\\myproject\\bin\\Debug\\\Orders\\1001Gssgsgs.txt'”,';放下工作台O_跟踪器--“?Sql注入刚刚杀死了你的数据库!你能解释一下我是如何用这种方法将insert写入查询的吗
'insert into MyTable(…table fields)values(…,@sub_orders)
'insert into My table values(…,@sub_orders)
表格字段是可选的,但最好包含它们,这样,如果数据库字段的顺序因某种原因发生变化,它仍然可以工作。
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);
        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();
        }