SQL问题,字段值包含"

xyt0401 2010-01-20 12:49:47
C#程序中要用到如下SQL语句:
 sqlstring="insert into A(test) values('"+txttest.Text.Trim()+"')"

其中txttest.Text.Trim()的值末尾可能包含一个双引号,如17",也可能不包含双引号,
当该字段值末尾包含一个双引号时,生成的SQL语句变成了如下形式:
insert into A(test) values('17\"')
这显然不是我要的结果,此时需要插入的值应该是17",请高手帮忙解决!
...全文
324 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐乔巴 2010-01-20
  • 打赏
  • 举报
回复
第一种方法是用SqlParameter参数类
这个会自动帮你把一些不合法 有SQL注入的文字给过滤掉的
第二种就是自己手动过滤了 这个是要看项目要求的

liherun 2010-01-20
  • 打赏
  • 举报
回复
能行吗?期待
xyt0401 2010-01-20
  • 打赏
  • 举报
回复
非常感谢大家的帮助,尤其是soaringbird,我确实是从断点看到的执行语句,而没有让程序完整地执行一次。完整地执行,可以实现,不需要进行任何转换。因为我的疏忽,让部分朋友忙活了半天,不好意思,谢谢大家!!散分了!
xray2005 2010-01-20
  • 打赏
  • 举报
回复
中间过程不影响你的程序,不要太纠结。关键是如何正确的存到数据库并出来。

可以使用如下:

string txt=Server.HtmlEncode(txttest.Text.Trim());

sqlstring="insert into A(test) values('"+txt+"')"


显示的时候,使用Server.HtmlDecode转换一下。
soaringbird 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xyt0401 的回复:]
我的字段值里本身不包括“\”,“\”是在执行SQL语句时自动加进去的。高手再帮着想想办法啊
[/Quote]
“\”是编译器用来转义的,而且你是在断点看到它的吧?已经告诉过你了,不会被带入到数据库中。
xyt0401 2010-01-20
  • 打赏
  • 举报
回复
回复SQL77:
在SQL里直接插入语句:insert into A(test) values('17"') 当然可以得到我想要的结果,
问题是插入的值是根据一个控件的值来获得的,即
sqlstring="insert into A(test) values('"+txttest.Text.Trim()+"')"
此时,若txttest.Text.Trim()="17""
则运行程序时,执行的SQL语句就变成了
insert into A(test) values('17\"'),
怎样才能得到我想要的,即insert into A(test) values('17"')呢
xyt0401 2010-01-20
  • 打赏
  • 举报
回复
在SQL语句里截取字符串,再加上判断条件,应该可以实现,可是这种办法首先是写语句太费事,另外对执行效率恐怕也有影响。本人水平有限,恳请高人指点简单有效的解决办法。
SQL77 2010-01-20
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-01-20 13:22:33
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
go
create table #TB([A] varchar(20))

--------------开始查询--------------------------
INSERT #TB SELECT '17"'

SELECT * FROM #TB
----------------结果----------------------------
/*


(所影响的行数为 1 行)

A
--------------------
17"

(所影响的行数为 1 行)



*/
xyt0401 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liaoyukun111 的回复:]
txttest.Text.Trim().Trim('"').Trim('\');
[/Quote]

我的字段值里本身不包括“\”,“\”是在执行SQL语句时自动加进去的。高手再帮着想想办法啊
xyt0401 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
string  sql= String.Format( "insert into A(test) values 
VALUES('{1}')",txttest.Text.Trim().Replace( " ' ",  " ' ' "));
[/Quote]

这是将1个单引号替换为2个单引号,我的字段值里不含单引号而是双引号,高手们再帮着想想办法啊
soaringbird 2010-01-20
  • 打赏
  • 举报
回复
 sqlstring="insert into A(test) values('17\"') "
难道插入的值不是17"?
wuyq11 2010-01-20
  • 打赏
  • 举报
回复
string sql= String.Format( "insert into A(test) values
VALUES('{1}')",txttest.Text.Trim().Replace( " ' ", " ' ' "));
liaoyukun111 2010-01-20
  • 打赏
  • 举报
回复
txttest.Text.Trim().Trim('"').Trim('\');

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧