Я знаю, что здесь было много вопросов о встроенных sql против хранимых процедур ...
Я не хочу начинать еще один такой! Это о встроенном (или динамическом) sql.
Я также знаю, что этот вопрос стал более или менее спорным с Linq to SQL и его преемником Entity Framework.
Но ... предположим, что вы выбрали (или требуются от своего начальства) для работы с простым старым ADO.NET и встроенным (или динамическим) sql . Каковы же лучшие практики для этого и для форматирования SQL?
Теперь я делаю следующее:
Мне нравится сначала создавать свои операторы SQL в хранимой процедуре. Это дает мне возможность окрашивать синтаксис в SQL Server Management Studio и возможность легко тестировать запрос, не выполняя его в коде через разрабатываемое мной приложение.
Так что, пока я внедряю / отлаживаю, мой код выглядит так:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myStoredProcName";
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
После завершения этапа отладки и тестирования я изменяю приведенный выше код следующим образом:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = GetQuery();
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
И я добавляю дополнительный приватный метод, например GetQuery()
, в котором я копирую / вставляю весь блок хранимой процедуры следующим образом:
private string GetQuery()
{
return @"
SET NOCOUNT ON;
SELECT col1, col2 from tableX where id = @id
-- more sql here
";
}
Преимущество такой работы заключается в том, что я могу легко возвращать код для повторного вызова хранимой процедуры, если позже мне придется отлаживать / обновлять код sql, и как только это будет сделано, я легко могу вернуть код sql с помощью функции копирования / вставки , без необходимости помещать кавычки вокруг каждой строки и тому подобное .
Полезно ли включать в запрос символы новой строки?
Есть ли другие вещи или уловки, о которых я не думал, которые могут сделать этот подход лучше?
Как вы, ребята, делаете такие вещи?
Или я единственный, кто все еще использует (должен использовать) встроенный sql?