【发布时间】:2011-08-01 21:02:33
【问题描述】:
我想使用列名作为参数,基于列列表生成几条 SQL 语句。
编辑: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 等)和不同的数据提供者,如 Oracle、MySQL、Postgres 等,基于 app.config 中的连接字符串设置。因此我需要知道我必须使用哪个前缀。对于 MS-SQL 是 @,Oracle 使用 :,其余的我其实不知道。
有没有办法从提供者工厂获取这个前缀字符?
System.Data.SqlClient.SqlClientFactory.Instance没有这样的信息或者至少我找不到。
要不然,你能给我一份常用数据库的清单吗?
编辑:目标平台是 .NET 2 到 .NET 4,信息应该可以通过提供程序工厂获得。
【问题讨论】:
-
你能提供你用来生成SQL的代码吗?
标签: .net database ado.net factory abstract