为了账号安全,请及时绑定邮箱和手机立即绑定

将List <>传递给SQL存储过程

将List <>传递给SQL存储过程

慕容3067478 2019-11-30 14:40:12
我经常不得不将多个项目加载到数据库中的特定记录。例如:网页显示要包含在单个报告中的项目,所有项目都是数据库中的记录(“报告”是“报告”表中的记录,“项目”是“项目”表中的记录)。用户正在通过网络应用程序选择要包含在单个报告中的项目,假设他们选择了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,          IdFROM     fn_GetIntTableFromList(@Items,'~')该函数返回一列整数表。我的问题是:有没有更好的方法来处理这样的事情?注意,我不是在问数据库规范化之类的问题,我的问题专门与代码有关。
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

如果您选择使用SQL Server 2008,则有一个名为“表值参数”的新功能可以解决此确切问题。


在此处和此处查看有关TVP的更多详细信息,或者只是向Google询问“ SQL Server 2008表值参数”-您会发现大量信息和示例。


强烈建议- 如果可以迁移到SQL Server 2008 ...


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 1104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信