C# 提取数据库提供程序';从正则表达式中删除分隔符
我已打开与ADO.Net的连接,正在检索数据源信息。连接可以是SQL Server、Oracle、MySQL、ODBC 当我执行以下代码时:C# 提取数据库提供程序';从正则表达式中删除分隔符,c#,sql,regex,oracle,ado.net,C#,Sql,Regex,Oracle,Ado.net,我已打开与ADO.Net的连接,正在检索数据源信息。连接可以是SQL Server、Oracle、MySQL、ODBC 当我执行以下代码时: DataTable collection=connection.GetSchema(“数据源信息”) 它返回大量信息,包括quoteIdentifierPattern。此项将作为正则表达式返回: 对于SQL,它返回:([^\[]\]\])*) 对于Oracle,它返回:“^(([^“]|”“)*)$” 我想知道是否有一种方法可以对正则表达式进行反向工程,以
DataTable collection=connection.GetSchema(“数据源信息”)代码>
它返回大量信息,包括quoteIdentifierPattern。此项将作为正则表达式返回:
对于SQL,它返回:([^\[]\]\])*)
对于Oracle,它返回:“^(([^“]|”“)*)$”
我想知道是否有一种方法可以对正则表达式进行反向工程,以检索提供者的分隔符(左和右)?
结果应该是:
对于SQL:[用于左分隔符,]用于右分隔符
对于Oracle:“用于左分隔符,”用于右分隔符
有人问了一个类似的问题,但没有得出结论:
编辑
当我使用DbCommandBuilder.QuotePrefix时,它适用于除OLE DB和ODBC之外的大多数提供程序。
我使用SQL Server提供程序、OLE DB和ODBC提供程序调用了DbCommandBuilder.QuotePrefix
和DbCommandBuilder.QuoteSuffix
,结果如下:
所以现在我主要关心的是如何使用OLEDB和ODBC。而不是从quoteIdentifierPattern
反向工程这些,使用和
不太清楚的是:如果正则表达式模式是固定的,为什么不使用字符串检查方法来检查它们呢?例如,if(regex==@”(([^\[]\]\]\])*))quoteIdentifierPattern=”[“;
它们不是固定的,这只是具有特定驱动程序的SQL Server提供程序的一个示例。但是,当我使用odbc提供程序连接到SQL Server数据库时,它可以返回另一个正则表达式。(因为对于SQL Server,我们可以使用[和]作为分隔符)。另一方面,我们使用了大量的提供程序,并且我们不预先知道我们可能使用的所有提供程序的函数结果。OP需要一个无论使用什么提供程序都能工作的解决方案。有时您可以使用oledb或odbc,但您确实不知道标识符。此解决方案不适用于oledb和odbc连接。返回始终为空的前缀和后缀。此解决方案适用于除OLEDB和ODBC之外的大多数提供程序,我顺便编辑了这个问题。thx
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; // `