c# - 从 Dictionary<int, StringBuilder> 到表值 SqlParameter。如何?

标签 c# sql-server sql-server-2008 dictionary table-valued-parameters

我的代码中的字典定义为:

Dictionary<int, StringBuilder> invoiceDict = new Dictionary<int, StringBuilder>();

每个 KeyValuePair 中的每个 Value Dictionary 实际上是当前创建的三个独立的值,如下所示:

invoiceDict.Add(pdfCount+i, new StringBuilder(invoiceID.Groups[1].ToString() + "|" + extractFileName + "|" + pdfPair.Key));

如您所见,这三个值由“|”分隔。词典中的“行”数可以在 600-1200 之间。我想使用表值参数在一次操作中获取我的 SQL Server 2008 数据库中的所有内容。

表值参数定义如下:

CREATE TYPE dbo.BatchSplitterInvoices AS TABLE
(
    InvoiceID varchar(24),
    NotePath varchar(512),
    BatchID varchar(50)
)

CREATE PROCEDURE dbo.cms_createBatchSplitterInvoices (
  @Invoices dbo.BatchSplitterInvoices READONLY,
  @StaffID int
)

从字典获取可以传递到表值参数中的内容的最佳方法是什么?我应该使用字典以外的东西吗?或者,我是否需要将 Dictionary 解析为另一个更好的数据结构?

SqlParameter invoicesParam = cmd.Parameters.AddWithValue("@Invoices", invoiceDict.Values);
invoicesParam.SqlDbType = SqlDbType.Structured;

谢谢。

最佳答案

由于围绕 TVP 的文档有点差(需要的不仅仅是 IEnumerable),而且无论如何都必须解析字典的内容,我决定将字典循环到 DataTable 中,这似乎是首选对象喂一个 TVP。

关于c# - 从 Dictionary<int, StringBuilder> 到表值 SqlParameter。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413364/

相关文章:

sql - 输出子句 : The multi-part identifier could not be bound

sql-server - LINQ-to-Entities 去掉 sp_executesql

c# - .NET Core .csproj 输出路径无法正常工作

c# - 在 Razor View 中显示枚举描述

c# - 将对对象的引用添加到列表

c# - 使用 Linq 将 SQL Server 数据库表导出到 XML

java - Netbeans 数据库资源管理器和 Microsoft SQL Server 无法相处

c# - 使用 IAppBuilder.UseWebApi 时出现问题

sql-server - SSIS 截断/删除所有行并重新插入与插入/更新增量

sql-server - 在两个非常相似的查询中,相同的操作单元需要不同的时间长度