将撇号编码到数据库或从数据库编码时出错

时间:2011-09-19 18:10:58

标签: asp.net sql-server vb.net apostrophe

我有一个动态创建服务器端的html字符串。

strHTML = "<td><a href""google.com"" onclick=""SaveToDatabase('" + arrString(0) + "','" + arrString(1) + "')""  

arrString(1)的值是 javascript:OpenDoc('ProductManual.pdf','vbShowDoc')

错误讯息:预计')'

如何对此值进行编码以保存在数据库中,并在从数据库中检索时对其进行解码?

4 个答案:

答案 0 :(得分:2)

<强>简单

您应该将'替换为\'

(C#)

arrString(0)=arrString(0).replace("'",@"\'")

答案 1 :(得分:2)

问题在于你 SaveToDatabase( '无论', '的javascript:OpenDoc的(' ProductManual.pdf ' 'vbShowDoc')') “”

请注意此处引号的问题。你在'javascript上有一个开场报价,但你的结束报价是在OpenDoc之后('那不是你的收盘报价,因此使用'' 您需要使用\'

对报价进行编码

另见: http://forums.asp.net/t/1047952.aspx

编辑: 我看到Mid787打败了我,但我想提供一些额外的信息

答案 2 :(得分:1)

每当您从用户或任何外部源读取输入时,在尝试从中创建SQL命令之前,您始终应始终逃避它。

执行此操作的一种方法是使用预准备语句或存储过程,并使用内置函数调用来设置变量。然后该函数将处理任何转义。

如果您想要或需要手工构建SQL,请编写一个函数来转义它。对于大多数SQL引擎,只需查找任何嵌入的单引号并将它们加倍即可,即转

帕特奥哈拉说'你好'

Pat O''Hara说''你好''

某些SQL引擎有其他需要转义的字符,就像在Postgres中一样,你也应该使用反斜杠。

写一个函数来做这个很容易,然后总是使用它。

我与程序员进行了很多对话,他们说他们在这种情况下并不打扰,因为他们认为没有人会在这个特定领域输入引用。但通常我们进行对话的原因是因为有人做了。不要分析它!去做就对了!这就像系好安全带。你可以坐在那里计算你在这次旅行中遇到意外的几率,但为什么呢?聪明的司机让他成为一个无意识的自动行动,只是总是戴上他的安全带,即使他正在做的是将车从车道移到街上。聪明的数据库程序员总是逃避输入字符串,因为你永远不知道。

答案 3 :(得分:0)

如果您尝试传入类似

的字符串
INSERT dbo.table(foo) VALUES('foo'bar');

你需要加倍撇号:

INSERT dbo.table(foo) VALUES('foo''bar');

但是@John Hartsock是绝对正确的:你不应该向SQL Server发送特殊的连接字符串。如果您使用参数,则可以完全避免此问题。