我想使用列名作为参数基于列列表生成多个 SQL 语句。
Edit: C#
var columns = new string[] { "COL1", "COL2" };
var tableName = "TABLE_1";
var prefix = "@"; // TODO get this from the provider factory
string sqlInsert = string.Format(
"INSERT INTO {0}\n( {1}) VALUES\n({2})",
tableName,
string.Join(", ", columns),
string.Join(", ", columns.Select(c => prefix + c)));
生成的SQL:
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
没有这样的信息,或者至少我找不到。
否则,你能给我一个常用数据库的列表吗?
Edit:目标平台是 .NET 2 到 .NET 4,并且该信息应该可以通过提供程序工厂获得。