2

我一直在寻找这个问题的解决方案。虽然这个特定的问题已经在这个论坛上讨论过很多次,但我没有得到任何正确的答案。

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

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

---以下是将 trandata 与其他参数一起作为输入传递并从 SQL 服务器调用 fn_stripsingleQuote10 函数的 C++ 代码:

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','''',''''''

我觉得我调用该功能的方式不正确。请提供解决方案。

4

1 回答 1

1

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

'quote_character'是用作分隔符的单字符字符串。 可以是单引号 ( ' )、左括号或右括号 ( [ ] ) 或双引号 ( " )。

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

于 2012-10-23T12:09:18.260 回答