And*_*dré 19 sql sql-server sql-server-2008
我有一些image数据类型的列,我想预览(或浏览)这些表中的数据.当我Select top 1000 rows在SQL Server Management Studio中使用时,image列的值以十六进制显示.预览这些图像的最简单方法是什么,因为十六进制值对我没用?
PS.:数据库不在我的控制之下,所以不能改变数据类型.
haw*_*kke 26
如果安装了LinqPad,预览图像很简单.查询记录,将二进制数据转换为图像,然后将输出转储到预览窗口.
编辑:如果你不知道,LinqPad是一个免费的实用工具,可用于许多事情,如管理工作室的替代品.大部分时间我都将它用作.Net的便笺簿,用于丢弃程序,测试代码和样本.
var entity = // fetch data
using (var ms = new MemoryStream(entity.Image.ToArray()))
{
System.Drawing.Image.FromStream(ms).Dump();
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

RTh*_*mas 18
我会写一个proc(或查询;见下文)将二进制文件导出到文件系统,然后使用任何旧的现成的照片管理实用程序(即Windows Photo Viewer)来查看内部的内容.
如果您的文件中的聪明人命名,您可以给自己提供有关名称中每个图像的足够信息,以便在您可视地找到您要查找的内容后再次在数据库中快速找到它.
这是一个将二进制文件导出到文件系统的proc.我修改了这个示例代码.它未经测试,但应该非常接近概念.它使用BCP导出二进制文件.点击此处查看BCP实用程序的完整文档.
proc还使您能够导出表中的所有内容,或者只根据传递的主键导出单行.它使用光标(yuck),以及一些动态sql(yuck,yuck),但有时你必须做你必须做的事情.
CREATE PROCEDURE ExportMyImageFiles
(
@PriKey INT,
@OutputFilePath VARCHAR(500)
)
AS
BEGIN
DECLARE @sql VARCHAR(8000)
IF @PriKey IS NULL /* export all images */
BEGIN
DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath + MyImageName + '.' +
MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
OPEN curExportBinaryImgs
FETCH NEXT FROM curExportBinaryImgs INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC xp_cmdshell @sql, NO_OUTPUT
FETCH NEXT FROM curExportBinaryImgs INTO @sql
END
CLOSE curExportBinaryImgs
DEALLOCATE curExportBinaryImgs
END
ELSE /* Export only the primary key provided */
BEGIN
SELECT @sql = 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath
+ MyImageName + '.' + MyImageType +
' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
WHERE PrimaryKey = @PriKey
EXEC xp_cmdshell @sql,NO_OUTPUT
END
END
Run Code Online (Sandbox Code Playgroud)
当然,假设存储在Image列中的内容实际上是图像而不是其他文件类型.希望如果它是一个图像你也知道类型,bmp,jpg,png,gif等.
如果你不想要完全成熟的proc的麻烦或可重用性尝试单个查询,如下所示:
DECLARE @OutputFilePath VarChar(500) = /* put output dir here */
DECLARE @sql VARCHAR(8000)
DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable]
WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) +
'" queryout ' + @OutputFilePath + MyImageName + '.' +
MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
FROM [dbo].[MyTable]
OPEN curExportBinaryImgs
FETCH NEXT FROM curExportBinaryImgs INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC xp_cmdshell @sql, NO_OUTPUT
FETCH NEXT FROM curExportBinaryImgs INTO @sql
END
CLOSE curExportBinaryImgs
DEALLOCATE curExportBinaryImgs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44940 次 |
| 最近记录: |