[英]c# OutOfMemoryException When I use a datatable to load data from SqlDataReader
我寫了這段代碼:
SqlConnection Conn = new SqlConnection("ConnectionString");
SqlCommand cmd = new SqlCommand("select * from tablename", conn);
SqlDataReader dr = cmd.ExecuteReader();
datatable dt = new datatable();
dt.load(dr);
但是當我將數據加載到數據表中時出現如下所示的異常,因為我有一個大尺寸(102 MB)的 xml 列。
引發了“System.OutOfMemoryException”類型的異常。
如果有人可以為我提供此異常的解決方案,我將不勝感激。
您的問題的解決方案:
select *
方式並以 fetch-next-batch 大小重新實現它,即重復獲取固定預定義大小的批次,處理它們,標記為在某處處理,然后 go 上。這是一個概念性的例子。 T-SQL 將 XML 數據類型列分解為矩形格式。 等式的 c# 一側不會有任何問題。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, product VARCHAR(20), xmldata XML);
INSERT INTO @tbl (product, xmldata) VALUES
('vase', N'<root>
<r>red</r>
<r>blue</r>
<r>yellow</r>
</root>'),
('phone', N'<root>
<r>black</r>
<r>white</r>
</root>');
-- DDL and sample data population, start
SELECT id, product
, c.value('(./text())[1]', 'VARCHAR(20)') AS color
FROM @tbl CROSS APPLY xmldata.nodes('/root/r') AS t(c);
Output
+----+---------+--------+
| id | product | color |
+----+---------+--------+
| 1 | vase | red |
| 1 | vase | blue |
| 1 | vase | yellow |
| 2 | phone | black |
| 2 | phone | white |
+----+---------+--------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.