0

我正在向数据库中插入值,但是当要插入的值带有撇号(例如 Jo's)时出现错误。我该如何解决这个问题?这是我的代码

     SqlDataReader readerReference = cmd_Reference.ExecuteReader();

        int loginIndex = readerReference.GetOrdinal("a column");
        int DomCodeLoginIndex = readerReference.GetOrdinal("a column");
        int dom_domain = readerReference.GetOrdinal("dom_domaine"); 
        int emp_surname = readerReference.GetOrdinal("a column");
        int emp_name = readerReference.GetOrdinal("a column");
        int srv_name = readerReference.GetOrdinal("a column");
        int emp_model_tel = readerReference.GetOrdinal("a column");
        int emp_EntryDate = readerReference.GetOrdinal("a column");
        int emp_Telephone = readerReference.GetOrdinal("a column");
        int emp_Mobile = readerReference.GetOrdinal("a column");
        int emp_Email = readerReference.GetOrdinal("a column");


        string insert = "INSERT INTO EMP_tracking(emp_login, emp_dom_code, emp_domain,   emp_affectation_date, emp_surname" +
            ",emp_name, emp_service,emp_telephone_model" +
            ",emp_entry_date" +
            ",emp_telephone_number" +
            ",emp_cellphone_number" +
            ",emp_email) VALUES ('{0}',{1},'{2}','"+DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") +"','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')";




    string toInsert = string.Format(insert, readerReference.GetString(loginIndex),
                                            readerReference.GetInt32(DomCodeLoginIndex ), 
                                            readerReference.GetString(dom_domain),
                                            readerReference.GetString(emp_surname ),
                                            readerReference.GetString(emp_name), 
                                            readerReference.GetString(srv_name), 
                                            readerReference.GetString(emp_model_tel), 
                                            readerReference.GetDateTime(emp_EntryDate), 
                                            readerReference.GetString(emp_Telephone),
                                            readerReference.GetString(emp_Mobile), 
                                            readerReference.GetString(emp_Email)
                                   );      


    cmd_Insert.CommandText = toInsert;
    cmd_Insert.ExecuteNonQuery();

假设相关列是emp_login。解决方案将如何在其上实施?

4

3 回答 3

2

使用参数化查询,这将解决您的问题并将您从SQL 注入中拯救出来

请参阅本教程:C-Sharp 数据库参数化插入教程

于 2013-02-04T11:13:20.283 回答
2

这个问题一遍又一遍地出现。您不应该使用连接创建 SQL 字符串 - 而是使用参数:

string insert = "INSERT INTO EMP_tracking(emp_login, emp_dom_code, emp_domain,   emp_affectation_date, emp_surname" +
        ",emp_name, emp_service,emp_telephone_model" +
        ",emp_entry_date" +
        ",emp_telephone_number" +
        ",emp_cellphone_number" +
        ",emp_email) VALUES (@emp_login, @emp_dom_code, //... etc.";

cmd_Insert.Parameters.AddWithValue("@emp_login", readerReference.GetString(loginIndex));
cmd_Insert.Parameters.AddWithValue("@emp_dom_code", readerReference.GetInt32(DomCodeLoginIndex));
//etc...
于 2013-02-04T11:14:25.710 回答
1

您可以尝试用另一个撇号转义撇号。

这里有一个类似的问题: 如何插入包含撇号(单引号)的值?.

警告:SQL 注入警报。除非通过参数,否则不允许数据库操作。

于 2013-02-04T11:12:35.227 回答