从正则表达式

时间:2018-01-24 23:27:36

标签: c# sql regex oracle ado.net

我与ADO.Net建立了连接,我正在检索数据源信息。连接可以是SQL Server,Oracle,MySQL,ODBC ......

当我执行以下代码时:

DataTable collection = connection.GetSchema("DataSourceInformation");

它会返回很多信息,包括 QuotedIdentifierPattern 。这个作为ReGex返回:

对于SQL,它返回:(([^\[]|\]\])*)

对于Oracle,它返回:"^(([^"]|"")*)$"

我想知道是否有办法对ReGex进行逆向工程以检索提供商的分隔符(左和右)? 结果应该是:

对于SQL: [表示左侧分隔符,] 表示右侧分隔符

对于Oracle:左侧分隔符,右侧分隔符

  

提出了类似的问题,但没有一个明确的答案:   Parsing regular expressions coming out of GetSchema's Common Schema Collection

修改

当我使用DbCommandBuilder.QuotePrefix时,它适用于除OLE DB和ODBC之外的大多数提供程序。这是DbCommandBuilder返回的例子。 Connections to test

我使用SQL Server提供程序,OLE DB和ODBC提供程序调用{​​{1}}和DbCommandBuilder.QuotePrefix,结果如下:

Result of QuotePrefix and QuoteSuffix

所以现在我主要关注的是使用OLE DB和ODBC。

1 个答案:

答案 0 :(得分:2)

不使用QuotedIdentifierPattern对这些进行逆向工程,而是使用DbCommandBuilder.QuotePrefixQuoteSuffix

var builder = SqlClientFactory.Instance.CreateCommandBuilder();
var prefix = builder.QuotePrefix; // [
var suffix = builder.QuoteSuffix; // ]

var builder = OracleClientFactory.Instance.CreateCommandBuilder();
var prefix = builder.QuotePrefix; // "
var suffix = builder.QuoteSuffix; // "

var builder = MySqlClientFactory.Instance.CreateCommandBuilder();
var prefix = builder.QuotePrefix; // `
var suffix = builder.QuoteSuffix; // `