在Access 2003中绑定到控件的记录集中出现的转义字符
问题描述:
我有一些存储在包含撇号的SQL Server中的数据。在SQL Server表中撇号被转义。例如,“罗伯茨的论文”一词被存储为“罗伯特的论文”。我使用Access 2003作为应用程序的字体结尾,并使用ADO使用存储过程访问存储在SQL Server中的数据。在Access 2003中绑定到控件的记录集中出现的转义字符
我遇到的问题是如何使用记录集检索数据然后绑定到控件时“双转义”双撇号。这里是一些示例代码。
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.ConnectionString = myConnectionString
cnn.Open
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cnn
rs.Source = "EXEC uspMyStoredProcedureName"
rs.LockType = adLockOptimistic
rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.Open
Set ListControl.Recordset = rs
Set rs = Nothing
Set cnn = Nothing
我是否必须手动“循环”记录集并解除撇号?谢谢。
答
您不必匆忙地看任何东西。双撇号形式仅用于SQL语句内的字符串文字。数据库中插入的实际值INSERT... 'Robert''s Thesis';
为Robert's Thesis
,这是您从SELECT
中抓取的记录集中读取的值。
如果uspMyStoredProcedureName
里面有什么奇怪的事情导致加倍的撇号得到返回,那么它就坏了,需要修复;如果在数据库中有Robert''s Thesis
作为实际值,那么您插入了损坏的数据,您应该查看修复完成的代码并清理数据。
答
如果您不可能更改uspMyStoredProcedureName,那么您将不得不遍历结果集。 否则,将存储过程中的select语句从col
更改为Replace(col, '''''', '''')
就可以了。 是的,在第二个参数中有六个单引号,在第三个参数中有四个:两个括起一个字符串,在其中每个引号加倍以避免它。
顺便说一句:为什么数据存储与加倍报价呢?
看起来好像我不需要将数据“转义”存储在数据库中。我想我很习惯通过直接的SQL插入数据,而不得不转义某些字符。感谢“bobince”和“Frank”! – webworm 2010-06-29 14:15:34