我有定义为的字典的代码:
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/