替换SQL Server中的单引号的问题

时间:2012-10-23 12:03:22

标签: sql-server visual-c++

我一直在为这个问题搜索解决方案。尽管在这个论坛上已经多次讨论过这个特殊问题,但我没有得到任何正确答案。

我将从第三方获取可以包含单引号的数据。此数据需要插入到数据库中,当它包含单引号时,它会失败并抛出以下错误:

Msg 105, Level 15, State 1, Line 7
Unclosed quotation mark after the character string '

---以下是c ++代码,用于传递trandata作为输入以及其他参数,并从SQL服务器调用fn_stripsingleQuote10函数:

strSQLText = "declare @returnType as varchar(max)\n EXEC @returnType = CABINET..fn_stripsingleQuote10 ";
sqlTxtParams.Format("'%s', '%s', '%s', tranData, sing_quote, double_sing_quote);

strSQLText += sqlTxtParams;

----我的sql函数(fn_stripsingleQuote10)替换单引号

USE [cabinet]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE function [dbo].[fn_stripsingleQuote10](
 @strip varchar(Max),@patern varchar(5),@replace varchar(5)
 )
returns varchar(Max) as begin

 declare @CleanString varchar(Max)     
    SET @CleanString=(REPLACE(@strip,@patern, @replace))

 return @CleanString
end

示例输出: 例如: 将@returnType声明为varchar(max)EXEC @returnType = CABINET..fn_stripsingleQuote10'fsds'd','''',''''''

我觉得我调用函数的方式不合适。请提供解决方案。

1 个答案:

答案 0 :(得分:1)

严格来说,你正在寻找QUOTENAME,这正是你所要求的:

  

'quote_character'是一个单字符串,用作分隔符。   可以是单引号('),左括号或右括号([]),   或双引号(“)。

但是,您的代码很可能现在暴露给SQL注入,您应该实际使用参数。几乎从不 required 将输入连接到生成的执行SQL中。