我与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返回的例子。
我使用SQL Server提供程序,OLE DB和ODBC提供程序调用{{1}}和DbCommandBuilder.QuotePrefix
,结果如下:
所以现在我主要关注的是使用OLE DB和ODBC。
答案 0 :(得分:2)
不使用QuotedIdentifierPattern
对这些进行逆向工程,而是使用DbCommandBuilder.QuotePrefix
和QuoteSuffix
。
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; // `