Мне часто приходилось загружать несколько элементов в конкретную запись в базе данных. Например: веб-страница отображает элементы для включения в один отчет, все из которых являются записями в базе данных (отчет - это запись в таблице отчета, элементы - это записи в таблице элементов). Пользователь выбирает элементы для включения в один отчет через веб-приложение, и, скажем, он выбирает 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,'~')
Где функция возвращает целую таблицу из одного столбца.
У меня такой вопрос: есть ли лучший способ справиться с чем-то подобным? Обратите внимание, я не спрашиваю о нормализации базы данных или о чем-либо подобном, мой вопрос связан именно с кодом.