J'ai souvent eu à charge de plusieurs éléments à un enregistrement particulier dans la base de données. Par exemple: une page web affiche les éléments à inclure pour un seul rapport, qui sont tous des enregistrements dans la base de données (Rapport est un record dans le Rapport de tableau, les Éléments sont des enregistrements dans le tableau des éléments). Un utilisateur de sélectionner les éléments à inclure dans un rapport unique via une application web, et disons-ils choisir 3 éléments et de se soumettre. Le processus permettra d'ajouter ces 3 éléments de ce rapport par l'ajout d'enregistrements à une table appelée ReportItems (Lang,ItemId).
Actuellement, je voudrais faire quelque chose comme ceci dans le code:
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);
}
et ce dans la procédure Stockée:
INSERT INTO ReportItem (ReportId,ItemId)
SELECT @ReportId,
Id
FROM fn_GetIntTableFromList(@Items,'~')
Où la fonction renvoie un tableau de la colonne de nombres entiers.
Ma question est la suivante: est-il une meilleure façon de gérer quelque chose comme cela? Remarque, je ne suis pas de demander à propos de la base de données de normalisation ou quelque chose comme ça, ma question porte plus précisément avec le code.