如何向数据库中插入带有单引号(')的字符串?在线等待

时间:2021-11-26 21:45:08
我用SQL语句往数据库某字段(字符型)中插入字符串,但是当该字符串中带有单引号('')时,好像就会出错!表现为插入的字符串被从单引号处截断,然后SQL语句当然就出错拉!如下:
 CString strSQL;
 strSQL.Format("Insert into MyTable(Name) Values('%s')", "My Name is 'xy'");

15 个解决方案

#1



 strSQL.Format("Insert into MyTable(Name) Values('%s')", "My Name is ''xy''");

#2


严格说来,我的问题是:
CString strSQL,strData;
 strSQL.Format("Insert into MyTable(Name) Values('%s')", strData);
这里的strData里是否含有单引号,是由程序在运行时确定的,比如从用户的输入中获得,那么该如何解决!

#3


cstring::replace

strData.Replace("'","''");

#4


(1) 不知是否可行,如果可行,一定送分;首先感谢你!
(2) 另外,我觉得你的这种解决方法好像不是很好,是否有更好的方法,请大家共同讨论;
    再次表示感谢!

#5


strSQL.Repace( "'", "''");
就这么简单

#6


替换掉所有回车符

#7


楼主还没说你用什么数据库呢,根据数据库决定的!

#8


遍历字符串,把一个'换成两个''就可以了。这是由于SQL Server所限定的。
select * from a where a='bbbbb' and b= 'cccccccc'
看到没,SQL语句中字符串都是用''标示的。如果a='bbbbbb'中得bbbbbbb是bbbb'bb哪肯定是有问题了
要避免这个问题,也只有找到所有bbbbb'bb中'得位置,然后换成bbbbb''bb就可以了

#9


替换字符,用CString的Replace

#10


楼主表怀疑啦,这是正解啦,大家都是这么做滴~~

#11


非常感谢大家!
我记得以前用的是Access2000,使用ADO访问技术,是出现了单引号的如上问题;
现在我用的SQL Server2000,因为Access的经验,我好像在遇到此类问题时,作了回避,因此是否一定在SQL Server2000中出现过该问题,不影响不是很深;
另外,前一段时间(包括现在)用的Oracle817不知是否有问题,我要好好试一试,如果有结果,我会贴出来与大家共享!
再次感谢大家的热心!谢谢!

#12


如果楼主还没有理解,我再详细一点

CString strSQL;
CString strRequest;
strRequest = "My Name is 'xy'";
strRequest.Replace("'", "''");
strSQL.Format("Insert into MyTable(Name) Values('%s')", strRequest);

Replace("'", "''"); 这种方法, ASP也是这么干的,引号里的字符串用''表示一个',外面配对的'xxxxxxx'是表示字符串的边界

#13


汗~原来都用过~

#14


既然楼上的朋友问了,我就多说几句吧

----------------------------------------------------------------
原贴内容:
CString strSQL;
CString strRequest;
strRequest = "My Name is 'xy'";
strRequest.Replace("'", "''");
strSQL.Format("Insert into MyTable(Name) Values('%s')", strRequest);
-----------
您好,我请教个问题,如果我的sql很多,既想处理',又想省事,如何做啊?
我的sql都是str.Format(....);的,里面的string才是要处理的~
别告诉我sql里每个从界面弄来的变量都要replace下~

你可以写成一个函数,比如:
CString CheckString(CString strInput)
{
   strInput.Replace("'", "''");
   return strInput;  
}

如果是过滤从网页里过来的变量,可以这么写:
CString CheckRequestString(CString strRequest)
{
   strRequest.Replace("&", "&");
   strRequest.Replace("<", "&gt;");
   strRequest.Replace(">", "&lt;");
   strRequest.Replace("'", "''");
   return strRequest;  
}

上面我只是举例,替换如果有错请指正

#15


我用Oracle试了一下,却是可以,下面我来结贴。谢谢大家!

#1



 strSQL.Format("Insert into MyTable(Name) Values('%s')", "My Name is ''xy''");

#2


严格说来,我的问题是:
CString strSQL,strData;
 strSQL.Format("Insert into MyTable(Name) Values('%s')", strData);
这里的strData里是否含有单引号,是由程序在运行时确定的,比如从用户的输入中获得,那么该如何解决!

#3


cstring::replace

strData.Replace("'","''");

#4


(1) 不知是否可行,如果可行,一定送分;首先感谢你!
(2) 另外,我觉得你的这种解决方法好像不是很好,是否有更好的方法,请大家共同讨论;
    再次表示感谢!

#5


strSQL.Repace( "'", "''");
就这么简单

#6


替换掉所有回车符

#7


楼主还没说你用什么数据库呢,根据数据库决定的!

#8


遍历字符串,把一个'换成两个''就可以了。这是由于SQL Server所限定的。
select * from a where a='bbbbb' and b= 'cccccccc'
看到没,SQL语句中字符串都是用''标示的。如果a='bbbbbb'中得bbbbbbb是bbbb'bb哪肯定是有问题了
要避免这个问题,也只有找到所有bbbbb'bb中'得位置,然后换成bbbbb''bb就可以了

#9


替换字符,用CString的Replace

#10


楼主表怀疑啦,这是正解啦,大家都是这么做滴~~

#11


非常感谢大家!
我记得以前用的是Access2000,使用ADO访问技术,是出现了单引号的如上问题;
现在我用的SQL Server2000,因为Access的经验,我好像在遇到此类问题时,作了回避,因此是否一定在SQL Server2000中出现过该问题,不影响不是很深;
另外,前一段时间(包括现在)用的Oracle817不知是否有问题,我要好好试一试,如果有结果,我会贴出来与大家共享!
再次感谢大家的热心!谢谢!

#12


如果楼主还没有理解,我再详细一点

CString strSQL;
CString strRequest;
strRequest = "My Name is 'xy'";
strRequest.Replace("'", "''");
strSQL.Format("Insert into MyTable(Name) Values('%s')", strRequest);

Replace("'", "''"); 这种方法, ASP也是这么干的,引号里的字符串用''表示一个',外面配对的'xxxxxxx'是表示字符串的边界

#13


汗~原来都用过~

#14


既然楼上的朋友问了,我就多说几句吧

----------------------------------------------------------------
原贴内容:
CString strSQL;
CString strRequest;
strRequest = "My Name is 'xy'";
strRequest.Replace("'", "''");
strSQL.Format("Insert into MyTable(Name) Values('%s')", strRequest);
-----------
您好,我请教个问题,如果我的sql很多,既想处理',又想省事,如何做啊?
我的sql都是str.Format(....);的,里面的string才是要处理的~
别告诉我sql里每个从界面弄来的变量都要replace下~

你可以写成一个函数,比如:
CString CheckString(CString strInput)
{
   strInput.Replace("'", "''");
   return strInput;  
}

如果是过滤从网页里过来的变量,可以这么写:
CString CheckRequestString(CString strRequest)
{
   strRequest.Replace("&", "&amp;");
   strRequest.Replace("<", "&gt;");
   strRequest.Replace(">", "&lt;");
   strRequest.Replace("'", "''");
   return strRequest;  
}

上面我只是举例,替换如果有错请指正

#15


我用Oracle试了一下,却是可以,下面我来结贴。谢谢大家!