在c#中插入单引号的异常

时间:2011-05-27 06:34:10

标签: c# sql-server winforms exception

我面临的问题是。当我在文本字段中插入单引号时。在插入时,它会在该特定字段附近提供不正确的语法。为什么?单引号对sqlserver有特殊意义吗?

如果用户输入的内容如果没有,那么,或者有时候错误地输入单引号然后它会给出异常。有没有sol来处理这个?如果单引号与sqlserver有问题那么如何处理?

5 个答案:

答案 0 :(得分:9)

使用SqlParameter代替字符串连接

这种表达式是你在代码中可以做的最糟糕的事情,因为首先你会遇到数据类型转换的问题,其次是Sql Injection的大门是黑客的操作

string someQuery = "Select * from SomeTbl Where SomeTbl.SomeColumn = '" + tbSomeBox.Text+ "'" ;

而不是只使用这个

string someQuery = "Select * from SomeTbl Where SomeTbl.SomeColumn = @param";
SqlCommand someCommand = new SqlCommand(someQuery, conn);
someCommand.AddParams("@param",tbSomeBox.Text);
...

希望这有帮助

答案 1 :(得分:6)

SQL Server字符串(通常)用单引号括起来,因此如果在INSERT之前没有对它进行转义,则字符串中的单引号将导致错误。

单引号只需要加倍,因此字符串Will''s World会导致Will's World进入数据。

答案 2 :(得分:0)

您需要在SQL语句中转义单引号。

例如:

'don''t'

答案 3 :(得分:0)

在SqlServer中,如果要插入带引号的字符串,请在字符串之前和之后使用两次引号。例如,您想要插入'Hello',因此如果您要插入的字段具有varchar等字符串数据类型,请将其插入'''Hello'''

答案 4 :(得分:0)

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) { 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(); 
    string expression = "(newsequentiali'd())"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "Your Stored Procedure"; 
    cmd.Parameters.Add("Your Parameter Name", 
                SqlDbType.VarChar).Value = expression;    
    cmd.Connection = con; 
    using (IDataReader dr = cmd.ExecuteReader()) 
    { 
        if (dr.Read()) 
        { 
        } 
    } 
}