Sql server 替换SQL server中的单引号时出现问题

Sql server 替换SQL server中的单引号时出现问题,sql-server,visual-c++,Sql Server,Visual C++,我一直在寻找解决这个问题的方法。虽然这个问题在这个论坛上讨论过很多次,但我并没有得到任何正确的答案 我将从第三方获取可以包含单引号的数据。此数据需要插入数据库,当它包含单引号时,它将失败并引发以下错误: Msg 105, Level 15, State 1, Line 7 Unclosed quotation mark after the character string ' ---以下是C++代码,将Trand作为参数与其他参数一起输入,调用SQLServer:f/NoStutnLeQuo

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

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

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

---以下是C++代码,将Trand作为参数与其他参数一起输入,调用SQLServer:f/NoStutnLeQuoTe10函数:

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


我觉得调用函数的方式不正确。请提供一个解决方案。

严格地说,这正是您需要的:

“quote\u character”
是用作分隔符的单字符字符串。 可以是单引号(')、左括号或右括号([]), 或双引号(“)


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

Quotename不适用于超过128个字符的数据,并且我的输入包含大数据。您能告诉我您的意思吗通过“您应该实际使用一个参数”。很抱歉,我是SQL新手。我已经在为我的SQL函数参数传递参数。使用参数:不要构建包含“%s”、“s”、“s”、tranData、sing、double、sing、quote的文本,使用
@param
,并设置参数值。你的执行API是什么?OleDB(ADO)、ODBC、SqlClient(ADO.Net托管C++)?每个都有不同的设置参数的方法。ODBC:,OleDB非常感谢您的回答。我们使用ODBCAPI,当我开始使用参数时,它工作得很好。但是当我的输入数据更大(比如字符长度:18617)时,SQLBindParameter失败,并给出错误:ODBCSql server Invalid precision error。我正在尝试向varchar(max)类型的列插入数据。我使用SQLServer2008。您能提供解决方案吗?请特别参阅关于
SQL\u SS\u LENGTH\u UNLIMITED
的讨论。确保使用SQL本机客户端驱动程序进行连接。