【问题标题】:Determine string literal escape characters in Ado.net在 Ado.net 中确定字符串文字转义字符
【发布时间】:2009-07-21 23:30:51
【问题描述】:

给定来自任何数据提供者的任何 DbConnection,是否可以确定用于引用字符串文字的一个或多个字符以及转义字符串中的任何特殊字符?我也对引用架构/表/列名称标识符所需的字符感兴趣。

使用参数来指定这些东西不是一种选择,因为我的应用程序的目的是帮助用户构建 SQL 查询,并且在查询中包含常量是一种常见的情况。

我可以使用 DataSourceInformation 架构集合来获取类似 StringLiteralPattern 和 QuotedIdentifierPattern (见http://msdn.microsoft.com/en-us/library/ms254501.aspx)但这只能帮助我匹配现有的字符串,而不是自己创建它们。

【问题讨论】:

  • 我开始怀疑标准程序是否只是猜测。 " 用于标识符和 ' 用于字符串文字,用 \ 转义字符串中的特殊字符似乎是我见过的最常见(也可能是唯一)的情况。我只是担心遇到一些不同的未知驱动程序。

标签: .net sql database ado.net


【解决方案1】:

创建连接(称为 cnn)后,我执行以下操作来引用架构/表/列名称标识符:

'Get table and column delimiters
Dim sTest As String = ""
Dim sLeftDelimiter As String = ""
Dim sRightDelimiter As String = ""
Dim cmd As DbCommand = cnn.CreateCommand()
Dim adapter As DbDataAdapter = factoryDB.CreateDataAdapter()
Dim builder As DbCommandBuilder = factoryDB.CreateCommandBuilder()
cmd.Connection = cnn
adapter.SelectCommand = cmd
builder.DataAdapter = adapter
sTest = builder.QuoteIdentifier("test")
sLeftDelimiter = sTest.Substring(0, 1)
sRightDelimiter = sTest.Substring(5, 1)

【讨论】:

    【解决方案2】:

    我根据提供者类型和版本(由 DbConnection 确定)使用 switch 语句来了解要使用的分隔符/转义字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-24
      • 2010-11-19
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      相关资源
      最近更新 更多