2011-09-19 27 views
0

我有一个html字符串,它是动态创建的服务器端。编码撇号与数据库的错误

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

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

错误消息:预期 ')'

如何能我将这个值编码保存在数据库中,并在从数据库中提取时将其解码?

+0

你是如何保存到你的数据库?我们可以在保存到数据库时看到您使用的代码吗?发送更新到数据库时应该使用参数化。 –

+0

@John,查询保存非常简单ExecuteNonQuery。参数化意味着什么? – DotNetRookie

+0

保存到数据库时,不应该像这样创建查询语句。 'query =“Update TableA set Column1 ='”&someStringVar&“'其中PrimaryKey ='&someStringVar2&”'“'。相反,您应该使用参数化查询,如链接所示http://www.codinghorror.com/blog /2005/04/give-me-parameterized-sql-or-give-me-death.html –

回答

2

简单

就应该更换'\'

(C#)

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

如果你想在一个字符串传似

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

你需要翻倍撇号:

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

但@约翰Hartsock是绝对正确的:你不应该发送临时连接的字符串到SQL Server。如果你使用参数,你可以完全避免这个问题。

2

问题是你是 SaveToDatabase( '什么', '的javascript:OpenDoc的(' ProductManual.pdf ' 'vbShowDoc')') “”

注意到这里的引号的问题。你有一个开引号,在那不是你的结束引号“JavaScript,但您的交易报价它是OpenDoc的后(取”,因此使用\“ 您需要将您的报价与\编码”

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

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

+0

附加信息是赞赏,但是,我仍然收到相同的错误msg:Expected')'Line'1当我使用IE scriptDebugger – DotNetRookie

+0

使用您的建议时,第1行没有任何意义,这是可能导致错误的那一行javascript:ProcessElements('3','Product Manual〜Javascript: OpenDoc的( '' G '', '' NEW '');”, '', ''); – DotNetRookie

1

你从用户或任何外部源读取输入的任何时候,你应该始终始终始终试图建立之前逃吧来自它的SQL命令。

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

如果您想要或需要手动构建SQL,请编写函数以将其转义。对于大多数SQL引擎,它足以寻找任何嵌入式单引号和双他们,就是把

帕特奥哈拉说“你好”

帕特O''Hara说''你好''

一些SQL引擎有其他字符需要转义,就像在Postgres中你也应该加双反斜线。

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

我和程序员进行了许多对话,他们说他们在这种情况下不打扰他们,因为他们认为任何人都不可能在这个特定的领域输入报价。但通常我们进行对话的原因是因为有人做到了。不要分析它!去做就对了!这就像戴着安全带。你可以坐在那里计算你在这次特殊旅行中遇到的事故的可能性,但是为什么?聪明的驾驶员使他无意识的自动行动,即使他只是把车从车道上移到街道上,也总是戴上安全带。明智的数据库程序员总是逃避输入字符串,因为你永远不知道。