gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:50:03 26 4
gpt4 key购买 nike

我经常不得不将多个项目加载到数据库中的特定记录。例如:一个网页显示了单个报表要包含的项目,所有这些项目都是数据库中的记录(Report 是 Report 表中的一条记录,Items 是 Item 表中的记录)。用户正在通过 Web 应用程序选择要包含在单个报告中的项目,假设他们选择了 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,'~')

函数返回一个单列整数表。

我的问题是:有没有更好的方法来处理这样的事情?请注意,我不是在询问数据库规范化或类似问题,我的问题与代码特别相关。

最佳答案

如果您可以选择使用 SQL Server 2008,那么有一个称为“表值参数”的新功能可以解决这个问题。

查看有关 TVP 的更多详细信息 herehere或者直接向 Google 询问“SQL Server 2008 表值参数”——您会找到大量信息和示例。

强烈推荐 - 如果您可以迁移到 SQL Server 2008...

关于c# - 将 List<> 传递给 SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com