Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提取数据库提供程序';从正则表达式中删除分隔符_C#_Sql_Regex_Oracle_Ado.net - Fatal编程技术网

C# 提取数据库提供程序';从正则表达式中删除分隔符

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,它返回:“^(([^“]|”“)*)$” 我想知道是否有一种方法可以对正则表达式进行反向工程,以

我已打开与ADO.Net的连接,正在检索数据源信息。连接可以是SQL Server、Oracle、MySQL、ODBC

当我执行以下代码时:

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; // `