データベース内の特定のレコードに複数のアイテムをロードしなければならないことがよくありました。例: Web ページには、1 つのレポートに含めるアイテムが表示されます。これらはすべてデータベース内のレコードです (レポートはレポート テーブル内のレコードであり、アイテムはアイテム テーブル内のレコードです)。ユーザーは Web アプリを介して 1 つのレポートに含める項目を選択しており、3 つの項目を選択して送信するとします。このプロセスでは、ReportItems (ReportId,ItemId) というテーブルにレコードを追加することで、これら 3 つのアイテムをこのレポートに追加します。
現在、コードで次のようなことを行います。
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,'~')
関数は整数の 1 列のテーブルを返します。
私の質問はこれです: このようなものを処理するためのより良い方法はありますか? データベースの正規化などについて質問しているわけではないことに注意してください。私の質問は特にコードに関連しています。