Dapper: могу ли я использовать параметры для чего-либо? - PullRequest
3 голосов
/ 07 июня 2011

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

1 Ответ

2 голосов
/ 07 июня 2011

Если я правильно помню, Dapper использует параметризованный IDbCommand для выполнения своих запросов.

Параметризованные запросы - это просто операции замены строк.

Точнее говоря, параметризованный запрос позволяет иметь параметрыв вашем запросе отправляет значения для этих параметров, а затем SQL Server обрабатывает компиляцию запросов и передает значения для параметров.

Если вы не можете создать параметризованный запрос с простым ADO.NET, используя нужныйСинтаксис, Dapper.NET не сможет сделать это за вас.

...