在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 

我是否必须手动“循环”记录集并解除撇号?谢谢。

+0

看起来好像我不需要将数据“转义”存储在数据库中。我想我很习惯通过直接的SQL插入数据,而不得不转义某些字符。感谢“bobince”和“Frank”! – webworm 2010-06-29 14:15:34

您不必匆忙地看任何东西。双撇号形式仅用于SQL语句内的字符串文字。数据库中插入的实际值INSERT... 'Robert''s Thesis';Robert's Thesis,这是您从SELECT中抓取的记录集中读取的值。

如果uspMyStoredProcedureName里面有什么奇怪的事情导致加倍的撇号得到返回,那么它就坏了,需要修复;如果在数据库中有Robert''s Thesis作为实际值,那么您插入了损坏的数据,您应该查看修复完成的代码并清理数据。

如果您不可能更改uspMyStoredProcedureName,那么您将不得不遍历结果集。 否则,将存储过程中的select语句从col更改为Replace(col, '''''', '''')就可以了。 是的,在第二个参数中有六个单引号,在第三个参数中有四个:两个括起一个字符串,在其中每个引号加倍以避免它。

顺便说一句:为什么数据存储与加倍报价呢?