【发布时间】:2016-03-25 21:20:19
【问题描述】:
我正在替换一个 .net 应用程序,该应用程序使用 SqlDataReader 从数据库中提取记录。我将其替换为两部分过程,其中 SQL Server 将 BCP queryout 将来自 varbinary(max) 列的数据转换为平面文件,而 .net 应用程序将使用平面文件从 byte[] 的每一行创建 .jpg 图像那是在varbinary(max) 列中。
现有代码只是使用以下方法将该列转换为字节数组:
(byte[])reader[field];
就我而言,我正在尝试使用:
System.Encoding.Default.GetBytes(stringFromFlatFile)
但无法在 Windows 机器上查看生成的文件(错误已损坏/损坏或太大)
我已经尝试过 System.Encoding 下的每一种编码类型(Ascii、UTFX 等),但没有成功。
BCP queryout 中是否有额外的步骤,我需要在varbinary(max) 列中保留字节数组? SqlDataReader 有什么特别的事情要返回我需要添加到 .net 应用程序的字节数组吗?
【问题讨论】:
-
查看将二进制 jpg 放入文件的代码。这可能会给你一个线索。 BCP 查询是否创建字节的字符串表示。所以它会有一个字符串 "0x659671" 而不是数值 65 96 71 的字节。此外,如果您有从该字段读取的现有代码,请查看它。
-
我无权了解数据是如何放入表中的,但我同意您的做法是正确的。我创建了一个测试方法,它使用数据读取器将图像从 varbinary 字段拉入字节数组。然后我将字节数组的内存流用于系统。然后我使用 System.Drawing.Image 保存为 jpg。该图像可在 Windows 中查看。然后我使用了所有可用的编码方法从字节数组创建一个字符串。它们都不像 bcp 创建的字符串。
-
Bcp 创建一个类似于“FFD8FFE000104A46494600010100000100010000FFDB00430....”的字符串。
-
启动了一个相关但更具体的线程:stackoverflow.com/questions/36266451/…
-
找到了一种可行的方法.. 但一次只有一个图像/行:madhuottapalam.blogspot.com/2008/08/… 我仍然希望能够执行一系列行而不是使用光标。
标签: c# sql-server image encoding bcp