Я хочу сгенерировать несколько операторов 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, и информация должна быть доступна на фабрике провайдеров.