【发布时间】:2017-02-01 19:41:51
【问题描述】:
我将数据从 SQL Server 2012 表中提取到 SQL SMO 表中,然后循环遍历结果集。执行以下命令时,我在运行时收到内存不足错误:
let data = dr["Data"] == DBNull.Value ? "NULL" : "convert(varbinary(max), '0x" + BitConverter.ToString((byte[])dr["Data"]).Replace("-", "") + "')"
在遇到 DATALENGTH([Data]) 约为 15MB(15127052 字节)的行之前,它不会引发错误。
是否存在 BitConverter.ToString(byte[]) 可以处理的最大二进制数据大小?
【问题讨论】:
-
BitConverter 在从 15MB 文本文件中读取数据时是否存在类似问题? (如果这真的以任何方式涉及数据库方面,只是试图充实。)
-
不知道,没试过。
-
我建议这样做是因为您的问题可能与更广泛的受众相关(例如在 Stack Overflow 上),而不仅仅是我们的数据库疯子。这可能意味着更快或更好的答案。我认为,隔离它会很有用,这样您就可以确定这是 SMO 的问题还是
BitConverter或ToString()的一般问题。 -
我刚刚尝试了一个 ~22MB 的文本文件,它能够被打开、读取和转换。代码:byte[]缓冲区; FileStream fs = File.Open("C:\\Users\\wayne.pfeffer\\Downloads\\TextFile.txt", FileMode.Open);缓冲区=新字节[fs.Length]; fs.Read(buffer, 0, (int) fs.Length);字符串 s = BitConverter.ToString(buffer);
标签: sql-server-2012 smo