Я пишу код, который подготовит мою базу данных для моего приложения. В коде есть несколько повторяющихся операторов SQL при создании таблицы, и я хочу скрыть их в некоторых методах (на данный момент их всего два: создание первичного ключа и автоматическое увеличение идентификатора таблицы в Postgres). Для простого случая первичного ключа я сначала написал такую функцию:
public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
conn.Execute(@"
ALTER TABLE ""@tblName""
ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
", new { tblName = tblName,
constrName = tblName + "_pkey",
colName = colName } );
}
После долгих раздумий с ошибками и исключениями я, наконец, пришел к выводу, что использование параметров таким способом на самом деле не поддерживается, поэтому я переключился на традиционный вызов string.Format()
, и все было хорошо.
Но я не очень доволен. Этот способ использования параметров действительно не поддерживается? Если да, в каких местах я могу безопасно использовать эти параметры? Только для переменных частей SQL-запроса - например, места, где я могу использовать параметры хранимой процедуры?