Мне часто приходилось загружать несколько элементов в определенную запись в базе данных. Например: веб-страница отображает элементы для включения для одного отчета, все из которых являются записями в базе данных (отчет - это запись в таблице отчета, элементы - это записи в таблице элементов). Пользователь выбирает элементы для включения в один отчет через веб-приложение, и пусть они выбирают 3 элемента и отправляют. Этот процесс добавит эти 3 элемента в этот отчет, добавив записи в таблицу под названием ReportItems (ReportId, ItemId).
В настоящее время я буду делать что-то подобное в коде:
public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
Database db = DatabaseFactory.CreateDatabase(connStr);
string sqlCommand = "AddItemsToReport"
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
string items = "";
foreach (int i in itemList)
items += string.Format("{0}~", i);
if (items.Length > 0)
items = items.Substring(0, items.Length - 1);
// Add parameters
db.AddInParameter(dbCommand, "ReportId", DbType.Int32, Id);
db.AddInParameter(dbCommand, "Items", DbType.String, perms);
db.ExecuteNonQuery(dbCommand);
}
и это в хранимой процедуре:
INSERT INTO ReportItem (ReportId,ItemId)
SELECT @ReportId,
Id
FROM fn_GetIntTableFromList(@Items,'~')
Если функция возвращает одну таблицу столбцов целых чисел.
Мой вопрос таков: есть ли лучший способ справиться с чем-то подобным? Заметьте, я не спрашиваю о нормализации базы данных или что-то в этом роде, мой вопрос относится конкретно к коду.