我面临的问题是。当我在文本字段中插入单引号时。在插入时,它会在该特定字段附近提供不正确的语法。为什么?单引号对sqlserver有特殊意义吗?
如果用户输入的内容如果没有,那么,或者有时候错误地输入单引号然后它会给出异常。有没有sol来处理这个?如果单引号与sqlserver有问题那么如何处理?
答案 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())
{
}
}
}