在ADO.NET中获取参数前缀
我想使用列名作为参数,基于列列表生成几个SQL语句 编辑:C# 生成的SQL:在ADO.NET中获取参数前缀,.net,database,ado.net,factory,abstract,.net,Database,Ado.net,Factory,Abstract,我想使用列名作为参数,基于列列表生成几个SQL语句 编辑:C# 生成的SQL: INSERT INTO TABLE_1 ( COL1, COL2) VALUES (@COL1, @COL2) 这适用于SqlClient。但是我使用System.Data中的抽象类(DbCommand,DbParameter,等等)和基于app.config中连接字符串设置的不同数据提供程序,如Oracle、MySQL、Postgres等。因此,我需要知道我必须使用哪个前缀。对于MS-SQL,它是@,Oracl
INSERT INTO TABLE_1
( COL1, COL2) VALUES
(@COL1, @COL2)
这适用于SqlClient。但是我使用System.Data中的抽象类(DbCommand
,DbParameter
,等等)和基于app.config中连接字符串设置的不同数据提供程序,如Oracle、MySQL、Postgres等。因此,我需要知道我必须使用哪个前缀。对于MS-SQL,它是@
,Oracle使用:
,其余的我都不知道
有没有办法从提供程序工厂获取此前缀字符
System.Data.SqlClient.SqlClientFactory.Instance
没有这样的信息,或者至少我找不到
否则,你能给我一个常见数据库的列表吗
编辑:目标平台是.NET 2到.NET 4,信息应该可以通过提供商工厂获得。有两种方法可以帮助您,和。这些都是受保护的,所以使用它们时需要一些反射
请查看我对以下问题的回答,了解实现(也包括在库中):
我找到了答案,但我无法重现我是如何找到的: DbConnection可以提供一个架构表,其中还包含用于创建命令参数名的正确格式字符串,,SqlClient除外强>
DbProviderFactory myFactory = DbProviderFactories.GetFactory(myProviderName);
using (DbConnection myConnection = myFactory.CreateConnection())
{
myConnection.ConnectionString = mySettings.ConnectionString;
myConnection.Open();
string parameterMarker = myConnection
.GetSchema(DbMetaDataCollectionNames.DataSourceInformation)
.Rows[0][DbMetaDataColumnNames.ParameterMarkerFormat].ToString();
myConnection.Close();
}
对于
SqlCclient
parameterMarker
是{0}
,但应该是@{0}
。我将进一步研究以找出其他架构表列中包含的内容。您可以提供用于生成SQL的代码吗?ParameterMarkerPattern
是{0}
,因为@
已经包含在ParameterNamePattern
中,所以您应该同时检查这两个模式。
DbProviderFactory myFactory = DbProviderFactories.GetFactory(myProviderName);
using (DbConnection myConnection = myFactory.CreateConnection())
{
myConnection.ConnectionString = mySettings.ConnectionString;
myConnection.Open();
string parameterMarker = myConnection
.GetSchema(DbMetaDataCollectionNames.DataSourceInformation)
.Rows[0][DbMetaDataColumnNames.ParameterMarkerFormat].ToString();
myConnection.Close();
}