C# 在c中插入单引号时出现异常#

C# 在c中插入单引号时出现异常#,c#,sql-server,winforms,exception,C#,Sql Server,Winforms,Exception,我面临着这个问题。当我在文本字段中插入单引号时。在插入时,它给出了该特定字段附近不正确语法的例外情况。为什么?单引号对sqlserver有特殊意义吗 若用户输入的单词像“不”,它是,或者有时错误地在“开始”中输入单引号,那个么它会给出异常。有什么办法来解决这个问题吗?如果单一报价单与sqlserver有问题。。那么如何处理它呢?SQL Server字符串(通常)用单引号括起来,因此如果在插入字符串之前不进行转义,字符串中的单引号将导致错误 单引号只需加倍,因此字符串Will's World将导致

我面临着这个问题。当我在文本字段中插入单引号时。在插入时,它给出了该特定字段附近不正确语法的例外情况。为什么?单引号对sqlserver有特殊意义吗


若用户输入的单词像“不”,它是,或者有时错误地在“开始”中输入单引号,那个么它会给出异常。有什么办法来解决这个问题吗?如果单一报价单与sqlserver有问题。。那么如何处理它呢?

SQL Server字符串(通常)用单引号括起来,因此如果在插入字符串之前不进行转义,字符串中的单引号将导致错误


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

SQL Server字符串(通常)用单引号括起来,因此如果在插入字符串之前不转义,字符串中的单引号将导致错误

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

使用而不是字符串串联

这种表达式是您在代码中能做的最糟糕的事情,因为首先您在数据类型转换方面会遇到问题,其次是黑客的opem

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);
...
希望这有助于使用而不是字符串连接

这种表达式是您在代码中能做的最糟糕的事情,因为首先您在数据类型转换方面会遇到问题,其次是黑客的opem

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

希望这对您有所帮助,您需要在SQL语句中转义单引号

例如:

'don''t'

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

例如:

'don''t'


在SqlServer中,如果要插入带引号的字符串,请在字符串前后使用引号两次。例如,如果您想插入
'Hello'
,那么请像插入
''Hello'
一样插入它,前提是要插入的字段具有varchar等字符串数据类型。

在SqlServer中,如果要插入带引号的字符串,请在字符串前后使用引号两次。例如,要插入
“Hello”
,因此,如果要插入的字段具有varchar等字符串数据类型,请像插入代码那样插入它。

向我们展示一些代码,说明如何将参数传递给SQL语句。向我们展示一些代码,说明如何将参数传递给SQL语句。-1因为您提供了一种肮脏的方法来修复问题,SQL参数是解决方案。我是否可以将“quote”转换为十六进制值,就像HTML中我们使用的空间一样,,,与单引号相同,检索时我们必须再次转换?@Johann-我必须举手同意-这是对OPs问题的肮脏修复。带参数的SqlCommand要干净得多。@会像我说的那样吗?@Touseef-甚至不要尝试-可能,但会浪费时间。-1因为你提供了一种肮脏的方法来解决问题,SQL参数就是解决方案。我可以将“quote”转换为它的十六进制值吗,就像在HTML中我们使用的空间一样,,,同单引号一样,在检索时,我们必须再次转换它?@Johann-我必须举手同意-这是对OPs问题的肮脏修复。带参数的SqlCommand要干净得多。@会像我说的那样吗?@Touseef-甚至不要尝试那样-可能,但会浪费时间。-1因为你提供了一种肮脏的方法来解决问题,SQL参数就是解决方案发布问题的人问单引号在SQL Server查询中是否有特殊意义。我回答了那个问题,答案是肯定的。如果每个人都只是使用高级库而不了解幕后发生的事情,那么他们就会丢失重要信息。-1因为您提供了一种肮脏的方法来解决问题,SQL参数就是解决方案发布问题的人问单引号在SQL Server查询中是否有特殊意义。我回答了那个问题,答案是肯定的。如果每个人都只是使用高级库而不了解幕后发生的事情,那么他们就丢失了重要信息。-1因为您提供了一种肮脏的方法来解决问题,SQL参数是解决方案,也是数据检索的基础?我再次将这个替换函数与每个字符串放在一起?不需要再次格式化它。它只用于向数据库发送查询。谢谢Johann。它通过参数工作,不需要手动格式化参数。下面是代码。使用(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=“您的存储过程”;cmd.Parameters.Add(“您的参数名”,SqlDbType.VarChar).Value=expression;cmd.Connection=con;使用(IDataReader dr=cmd.ExecuteReader()){if(dr.Read()){}}}@SQL,请用新代码编辑您的答案,我将删除我的反对票-1,因为您提供了一种肮脏的方法来修复问题,SQL参数是解决方案,在检索数据时?我再次将这个替换函数与每个字符串放在一起?不需要再次格式化它。它只用于向数据库发送查询。谢谢Johann。它通过参数工作,不需要手动格式化参数。下面是代码。使用(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=“您的存储过程”;cmd.Parameters.Add(“您的参数名”,SqlDbType.VarChar).Value=expression;cmd.Connection=con;使用(IDataRea
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()) 
        { 
        } 
    } 
}