ADO.NET操作sql server 2005的varbinary(max)问题

zealienandmatthew 2009-03-07 09:35:06
文件以二进制形式存储在sql server 2005的varbinary(max)字段中

我想把其中的数据通过DataSet查出来,并转换成XML的字符串形式,以邮件正文的形式发送出去,然后在邮件的接收端解析还原这个文件。

没有能实现,小弟想问:

1.二进制形式存储的数据能不能像varchar 或者 int 存储的一样使用ADO操作,文件可能在10M左右?
2.我尝试使用sql server 2005的sp_send_mail的那个存储过程的@query参数发送邮件,但老是在收到的邮件中多了两行
第一行为字段名,最后一行为“(1行受影响)”,去掉首尾两行后,解析不能还原成原来的文件。是不是这个思路有问题啊?

小弟拜谢!
...全文
138 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
datahandler2 2009-03-08
  • 打赏
  • 举报
回复

后来用sql server 中的 sp_send_mail的@query参数把查询的结果以邮件正文或者附件的形式都发出来,结果还是不一样的,比原来的短
================
考虑一下你这个@query参数定义的变量长度。
zealienandmatthew 2009-03-08
  • 打赏
  • 举报
回复
不一样啊。
后来用sql server 中的 sp_send_mail的@query参数把查询的结果以邮件正文或者附件的形式都发出来,结果还是不一样的,比原来的短
zzc205 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zealienandmatthew 的回复:]
To 3 楼的:

varbinary(max)在Sql Server 中 Select出来是 16进制形式的
我用ADO查出来放到DataSet中的也是16进制形式的,可是比原来数据库中的短很多,前面的部分都是一样的
不知道是什么原因
[/Quote]

不会吧,查询分析器看到的结果和在代码中watch的结果不一样?
zealienandmatthew 2009-03-07
  • 打赏
  • 举报
回复
To 3 楼的:

varbinary(max)在Sql Server 中 Select出来是 16进制形式的
我用ADO查出来放到DataSet中的也是16进制形式的,可是比原来数据库中的短很多,前面的部分都是一样的
不知道是什么原因
mjjzg 2009-03-07
  • 打赏
  • 举报
回复
没研究过这样底层的东西,都应该是以xml的形式发送出去的.....
zzc205 2009-03-07
  • 打赏
  • 举报
回复
不知道你没能实现的原因是什么,无法还原?
不妨比对一下文件直接编码后的byte[]和数据库取出来的byte[]是否一致,我感觉是编解码的方式没有对。
zealienandmatthew 2009-03-07
  • 打赏
  • 举报
回复
1 楼的帖子早就看过了。不过仍然谢谢回复

我现在更想把文件数据以二进制存储的方式直接通过邮件(不是以文件附件的形式)同步到远端服务器再还原成文件
oyljerry 2009-03-07
  • 打赏
  • 举报
回复
http://www.cnblogs.com/sulu/articles/790644.html
2009年度十大SQL Server技巧文章 在向2009年告别之际,我们来回顾一下过去的一年中最受欢迎的SQL Server技巧,包括了OPENROWSET、FILESTREAM等函数的用法、密码工具介绍以及DBA日常工作建议等内容。 通过对这些精华文章的再次回顾,希望可以帮助您梳理一下这一年以来的工作以及学习心得,对未来一年更进一步打下更坚实的基础。 使用bcp工具导入和导出批量数据 微软SQL Server中的批量复制程序(Bulk Copy Program,BCP)能让数据库管理员将数据批量导入表中或将数据从表中批量导入文档中。它还支持一些定义数据如何导出、导入到什么地方、加载哪些数据等选项。  用bcp工具导入和导出批量数据(上)  用bcp工具导入和导出批量数据(中)  用bcp工具导入和导出批量数据(下) 使用SQL Server的OPENROWSET函数 你可能常常会需要运行一个ad hoc查询从远程OLE DB数据源提取数据,或者批量向SQL Server表导入数据。在这种情况下,你可以在T-SQL(Transact-SQL,微软对SQL的扩展)中用OPENROWSET函数给数据源传入一个连接串和查询来提取需要的数据。  使用SQL Server的OPENROWSET函数(上)  使用SQL Server的OPENROWSET函数(下) SQL Server密码破解工具简介 在对SQL Server系统执行入侵测试或者更高级别的安全审计时,有一种测试不应该被忽略,那就是SQL Server密码测试。这一点看起来显而易见,但是很多人都会忽略它。  SQL Server密码破解工具简介 使用XML在SQL Server上创建计算列 在SQL Server数据库中,当你想使用一个数据,而这个数据不保存在表中,计算列很有用。在SQL Server中使用XML数据来创建计算列,你的列定义必须包含必要的用来检测向列中插入的是什么数据的表达式。  使用XML在SQL Server上创建计算列(上)  使用XML在SQL Server上创建计算列(下) SQL Server中已满事务日志原因的检测 对于SQL Server数据库管理员来讲,已满事务日志是一个琐碎的,但又很常见的问题。它能引发事务的提前终止,甚至通过阻止所有事务的引入,从而引起系统的崩溃。对于数据库管理员来说,关键是理解将要发生的情况,以便他们可以追踪引起问题的原因。  SQL Server中已满事务日志原因的检测(上)  SQL Server中已满事务日志原因的检测(下) DBA五大浪费时间的工作 DBA以常规方式执行的一些任务,不仅对SQL Server数据库几乎没有益处,而且实际上可能对他们的生产环境造成不利影响。在本文中,我会阐述几类这样的工作。如果你正在执行其中的一些工作,我希望你能尽快停下来。  收缩数据库  碎片整理后重建索引  恢复完整备份  删减事务日志  人工通读错误日志 利用动态管理视图提高SQL Server索引效率 就如同数据库DBA了解的一样,合适的索引能够提高查询性能和应用程序可测量性。但是每个附加的索引,都给系统增加了额外开销,因为随着数据从表和视图中不断增加、修改或清除,SQL Server需要维护这些索引。  利用动态管理视图提高SQL Server索引效率(一)  利用动态管理视图提高SQL Server索引效率(二)  利用动态管理视图提高SQL Server索引效率(三) 在SQL Server tempdb满时检查数据文件 作为一名数据库DBA,肯定会听说过“tempdb数据库满了”。通常我们很容易确定造成这一问题的原因。但是更多的时候这一问题主要源于一组请求,涉及到新代码部署或逐渐增加的数据。  在SQL Server tempdb满时检查数据文件 SQL Server运作的简短课程 在实际执行任务之前,有一点背景信息可以会起到帮助作用。那么,到底SQL Server是如何工作的呢?不管你信不信,理解“黑盒”知识几乎可以在Microsoft SQL Server的所有方面起到帮助作用,例如从备份与存储到复制与镜像。  SQL Server运作的简短课程 实现SQL Server 2008中的文件流功能 SQL Server 2008中最新的文件流功能使得你可以配制一个数据类型为varbinarymax)的列,以便将实际数据存储在文件系统中,而非在数据库中。只要愿意,你仍可以作为一个常规的二进制列来查询此列,即使数据自身存储在外部。  实现SQL Server 2008中的文件流功能(上)  实现SQL Server 2008中的文件流功能(下)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧