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

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


实际上,每个KeyValuePair字典中的每个值都是三个单独的值,当前如下创建:

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


如您所见,这三个值用'|'分隔。词典中“行”的数量可以在600-1200之间变化。我想使用一个表值参数在一次操作中将所有这些值获取到SQL Server 2008 DB中。

表值参数定义如下:

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),而且无论如何都必须解析字典的内容,因此我决定将Dictionary循环到DataTable中,这似乎是提供TVP的首选对象。

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

10-10 18:45