当前位置: 首页 > 编程日记 > 正文

C#中读取数据库中Image数据

作者:未知 请与本人联系

DataReader 的默认行为是在整个数据行可用时立即以行的形式加载传入数据。但是,对于二进制大对象 (BLOB) 则需要进行不同的处理,因为它们可能包含数十亿字节的数据,而单个行中无法包含如此多的数据。Command.ExecuteReader 方法具有一个重载,它将采用 CommandBehavior 参数来修改 DataReader 的默认行为。您可以将 CommandBehavior.SequentialAccess 传递到 ExecuteReader 方法来修改 DataReader 的默认行为,以便让 DataReader 按照顺序在接收到数据时立即将其加载,而不是加载数据行。这是加载 BLOB 或其他大数据结构的理想方案。


在将 DataReader 设置为使用 SequentialAccess 时,务必要注意访问所返回字段的顺序。DataReader 的默认行为是在整个行可用时立即加载该行,这使您能够在读取下一行之前按任何顺序访问所返回的字段。但是,当使用 SequentialAccess 时,必须按顺序访问由 DataReader 返回的不同字段。例如,如果查询返回三个列,其中第三列是 BLOB,则必须在访问第三个字段中的 BLOB 数据之前返回第一个和第二个字段的值。如果在访问第一个或第二个字段之前访问第三个字段,则第一个和第二个字段值将不再可用。这是因为 SequentialAccess 已修改 DataReader,使其按顺序返回数据,当 DataReader 已经读取超过特定数据时,该数据将不可用。


当访问 BLOB 字段中的数据时,请使用 DataReader 的 GetBytes 类型化访问器,该访问器将使用二进制数据填充 byte 数组。您可以指定要返回的特定数据缓冲区大小以及从返回的数据中读取的第一个字节的起始位置。GetBytes 将返回 long 值,它表示所返回的字节数。如果向 GetBytes 传递空的 byte 数组,所返回的长值将是 BLOB 中字节的总数。您可以选择将字节数组中的某索引指定为所读取数据的起始位置。


以下示例从 Microsoft SQL Server 中的 pubs 示例数据库中返回发行者 ID 和徽标。发行者 ID (pub_id) 是字符字段,而徽标则是图形,即 BLOB。请注意,由于必须按顺序访问字段,所以将在访问徽标之前访问当前数据行的发行者 ID。


[Visual Basic]

Dim pubsConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;")

Dim logoCMD As SqlCommand = New SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn)


Dim fs As FileStream ' Writes the BLOB to a file (*.bmp).

Dim bw As BinaryWriter ' Streams the binary data to the FileStream object.


Dim bufferSize As Integer = 100 ' The size of the BLOB buffer.

Dim outbyte(bufferSize - 1) As Byte ' The BLOB byte() buffer to be filled by GetBytes.

Dim retval As Long ' The bytes returned from GetBytes.

Dim startIndex As Long = 0 ' The starting position in the BLOB output.


Dim pub_id As String = "" ' The publisher id to use in the file name.


' Open the connection and read data into the DataReader.

pubsConn.Open()

Dim myReader As SqlDataReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess)


Do While myReader.Read()

' Get the publisher id, which must occur before getting the logo.

pub_id = myReader.GetString(0)


' Create a file to hold the output.

fs = New FileStream("logo" & pub_id & ".bmp", FileMode.OpenOrCreate, FileAccess.Write)

bw = New BinaryWriter(fs)


' Reset the starting byte for a new BLOB.

startIndex = 0


' Read bytes into outbyte() and retain the number of bytes returned.

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize)


' Continue reading and writing while there are bytes beyond the size of the buffer.

Do While retval = bufferSize

bw.Write(outbyte)

bw.Flush()


' Reposition the start index to the end of the last buffer and fill the buffer.

startIndex = startIndex + bufferSize

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize)

Loop


' Write the remaining buffer.

bw.Write(outbyte)

bw.Flush()


' Close the output file.

bw.Close()

fs.Close()

Loop


' Close the reader and the connection.

myReader.Close()

pubsConn.Close()

[C#]

SqlConnection pubsConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;");

SqlCommand logoCMD = new SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn);


FileStream fs; // Writes the BLOB to a file (*.bmp).

BinaryWriter bw; // Streams the BLOB to the FileStream object.


int bufferSize = 100; // Size of the BLOB buffer.

byte[] outbyte = new byte[bufferSize]; // The BLOB byte[] buffer to be filled by GetBytes.

long retval; // The bytes returned from GetBytes.

long startIndex = 0; // The starting position in the BLOB output.


string pub_id = ""; // The publisher id to use in the file name.


// Open the connection and read data into the DataReader.

pubsConn.Open();

SqlDataReader myReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess);


while (myReader.Read())

{

// Get the publisher id, which must occur before getting the logo.

pub_id = myReader.GetString(0);


// Create a file to hold the output.

fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);

bw = new BinaryWriter(fs);


// Reset the starting byte for the new BLOB.

startIndex = 0;


// Read the bytes into outbyte[] and retain the number of bytes returned.

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);


// Continue reading and writing while there are bytes beyond the size of the buffer.

while (retval == bufferSize)

{

bw.Write(outbyte);

bw.Flush();


// Reposition the start index to the end of the last buffer and fill the buffer.

startIndex+= bufferSize;

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);

}


// Write the remaining buffer.

bw.Write(outbyte);

bw.Flush();


// Close the output file.

bw.Close();

fs.Close();

}


// Close the reader and the connection.

myReader.Close();

pubsConn.Close();
<script language=JavaScript src="../../js/aspxboy_search.js"></script>

相关文章:

创新工场提出中文分词和词性标注模型,性能分别刷新五大数据集| ACL 2020​

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;中文分词和词性标注是中文自然语言处理的两个基本任务。尽管以BERT为代表的预训练模型大行其道&#xff0c;但事实上&#xff0c;中文中基于全词覆盖 &#xff08;whole word masking&#xff09;的预训练模型比直接使…

使用XML在MSSQL把字串分解

今天要在mssql里处理一串Email地址。以分号分开的。以前自己写过一个split函数的。这次想使用xml来处理。mssql 2000和mssql 2005数据库对xml的支持有些不同。至少mssql 2005的功能多些。代码一&#xff1a;这个代码在MSSQL 2005测试成功, 在mssql 2000不通过。最后生成一个表变…

tomcat中server.xml文件详解

原文&#xff1a;http://www.cnblogs.com/starhu/p/5599773.html Tomcat Server的结构图如下&#xff1a;该文件描述了如何启动Tomcat Server <Server> <Listener /> <GlobaNamingResources> </GlobaNamingResources <Service> …

想提前目睹人到中年的发型?试试这款自制秃头生成器

要说最近哪部剧最红&#xff0c;我说是《隐秘的角落》没人有意见吧&#xff1f;看了这部片子&#xff0c;全国观众除了被男主张东升提醒爬山有风险之外&#xff0c;片中的另一个场景也颇让人印象深刻&#xff0c;容易让人产生共鸣&#xff0c;那就是张东升看到自己二十年后的样…

Windows Phone实用开发技巧(32):照片角度处理

在实际项目中&#xff0c;可能需要用户从相册中选择图片然后进行相应的处理。但是不知道大家有没有发现这样一种情况&#xff0c;就是手机里看是竖着的&#xff0c;但是上传到微博或者哪里的时候确实横着的。一种情况是你拿手机竖着拍照得话&#xff0c;照片就是横着的&#xf…

ubuntu 12 JDK 编译

下载openjdk源码 http://jdk7.java.net/source.html 安装Ubuntu上面的依赖包&#xff1a; 1、参考原书 环境变量配置&#xff1a; 1、去www.hzbook.com上面将深入理解java虚拟机&#xff0c;周志明写的那本书的代码download2、ALT_BOOTDIR变量最好引用 jdk1.7.0_04&#xff0c…

“编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时&#xff0c;都会遇到下面3个问题&#xff1a;1.想入门人工智能&#xff0c;但不知从何学起&#xff0c;也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xf…

文本的DES加密 MD5散列值 DSA的数字签名

作者&#xff1a;未知文本的DES加密为了对称加密的安全&#xff0c;将密码进行封装&#xff0c;先新建一个用于保存密码的类库cl&#xff1a;using System;using System.Text ;namespace cl{ /// <summary> /// Class1 的摘要说明。 /// </summary> public class C…

在SQL Server中调用.NET程序集

使用到这东西完全是个巧合和无奈之举。不小心在数据库中插入了一些HttpUtility.UrlEncodeUnicode之后的数据。数据库里的一些字段成了%uxxxx%uxxxx这样的结构。 搜索了半天T-SQL UrlDecode的函数&#xff0c;发现都不支持上面这种Unicode的。自己对T-SQL又不熟悉&#xff0c;时…

AngularJS2 + ASP.NET MVC项目

环境&#xff1a;VS2015&#xff0c; NodeJS:v 6.5, npm: v3.10, AngularJs 2 通过将ASP.NET MVC项目与Angualr 2官网上的quick start整合的过程中遇到些问题。 通过下面的若干配置最终向项目build成功。 转载于:https://www.cnblogs.com/1zhk/p/5831567.html

干货!仅有 100k 参数的高效显著性检测方法

作者 | 南开大学 程明明、依图科技 颜水成责编 | Carol封图 | CSDN 下载自视觉中国显著性目标检测模型通常需要花费大量的计算成本才能对每个像素进行精确的预测&#xff0c;因此这使得其几乎不适用于低功耗的设备。本文旨在通过提高网络计算效率来缓解计算花费与模型性能之间的…

如何将一个彩色图像转换成黑白图像

作者&#xff1a;未知彩色图像转换为黑白图像时需要计算图像中每像素有效的亮度值&#xff0c;通过匹配像素 亮度值可以轻松转换为黑白图像。 计算像素有效的亮度值可以使用下面的公式&#xff1a; Y0.3RED0.59GREEN0.11Blue 然后使用 Color.FromArgb(Y,Y,Y) 来把计算后的值…

修改Activity响应音量控制键修改的音频流

转自&#xff1a;http://rainhomepage.appspot.com/2010/05/hardware-volume-controls-audio-stream-setvolumecontrolstream 当开发多媒体应用或者游戏应用的时候&#xff0c;需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流&#xff0c;通过Activity中…

css3选择器二

在HTML中&#xff0c;通过各种各样的属性可以给元素增加很多附加的信息&#xff0c;了解和掌握css3一些的选择器&#xff0c;是很有必要的。 :enabled 和 :disabled选择器表单元素有可用&#xff08;“:enabled”&#xff09;和不可用&#xff08;“:disabled”&#xff09;状态…

结合ashx来在DataGrid中显示从数据库中读出的图片

作者&#xff1a;木子 http://blog.csdn.net/derny/下面利用ashx文件可以方便实现从数据库中读取图片并显示在datagrid当中 //---------------------------------------BindImage.aspx ---------------------------------------- <% Page language"c#" Codebehi…

如何度过二十多岁这段又穷又迷茫的岁月?

我们在后台常常会收到读者的留言我马上毕业了&#xff0c;但是现在很迷茫&#xff0c;不知道学校里学的&#xff0c;能不能真正的适应工作...我工作两三年&#xff0c;还是不知道怎么规划自己的技术成长路线&#xff0c;不知道该学什么来提升自己的竞争力...人生需要长线的经营…

Qt 自定义信号与槽

注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在&#xff0c;并在对象类头文件signals下定义&#xff0c;//第二个参数信号&#xff0c;//第三个参数this是槽方法所属类的对象&#xff0c;且必须在对象类的头文件的slots下定义//第四个参数槽…

php解析ip列表并入库

前一段时间因为要开发一个新项目&#xff0c;需要一个ip库&#xff0c;由于公司原本无这样一个库&#xff0c;所以急需从文件中匹配ip地址然后存库。下面是我下的一段程序&#xff0c;可能效率不是很高&#xff0c;代码也没有做过多的优化&#xff0c;有些地方比较繁琐&#xf…

AI 领域新突破,腾讯发布首个AI药物研发平台「云深智药」

7月9日&#xff0c;2020世界人工智能大会云端峰会开幕。会上&#xff0c;腾讯首席运营官任宇昕公布了用AI助力药物研发领域的最新进展——由腾讯自主研发的首个AI驱动的药物发现平台“云深智药&#xff08;iDrug&#xff09;”正式对外发布。云深智药平台的推出&#xff0c;将帮…

写入和读取图片(c# asp.net sqlserver)

作者&#xff1a;木子 http://blog.csdn.net/derny/首先要创建一个表包含自段image 和 type 类型各自为image 和 vnanchar WebForm1.aspx <% Page language"c#" Codebehind"WebForm1.aspx.cs" AutoEventWireup"false" Inherits"ReadA…

【MyBatis学习01】宏观上把握MyBatis框架

今天开始学习mybatis框架&#xff0c;博客主要记录学习过程中的一些总结&#xff0c;如有错误之处&#xff0c;欢迎留言指正~先用mybatis的鸟鸟来镇个楼&#xff0c;咳咳~~ mybatis框架是一个持久层框架&#xff0c;是Apache下的顶级项目。mybatis可以让开发者的主要精力放在s…

消除图片在ie中缓存而无法更新的问题

程序中图片是动态显示的 原先把打算把图片保存在服务器端然后显示 可是由于ie的缓存问题导致图片无法实时更新显示 所以改为把图片存在session中然后再显示 需要保存的时候再保存到本地 //&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&…

Linux shell笔记

由于工作的需要&#xff0c;越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书&#xff0c;安装书的章节整理了一些自己认为比较重要的命令&#xff0c;方便以后查阅。 No.001 文件安全与权限 1. umask 决定了新建文件的权限 2. 软链接(符号链接) ln -s source_…

ACL最佳论文提出最新NLP模型测试方法,最佳论文提名也不可小觑

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;ACL 2020公布了最佳论文奖&#xff0c;另有两篇最佳论文荣誉提名奖也各自提出了解决NLP领域问题的创新方法。最佳论文&#xff1a;Beyond Accuracy: Behavioral Testing o…

LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

逻辑卷缩减缩减的时候要注意缩减的空间不要超过文件系统的空间&#xff0c;不然缩减的时候会损坏文件系统。第一步要先取消挂载&#xff08;必须&#xff09;第二部检查文件完整性&#xff08;必须&#xff09;e2fsck -f /dev/vg0/lv0第三部文件系统缩减&#xff0c;先缩减文件…

屏掉F5刷新的办法

<body οnkeydοwn"KeyDown()"> function KeyDown(){ //屏蔽退格删除键,屏蔽 F5 刷新键,Ctrl R if ((event.keyCode116)||(event.ctrlKey && event.keyCode82)) { event.keyCode0; event.returnValuefalse; } }

WAIC汇聚全球顶级科学家,畅谈人工智能的未来挑战与突破

7月9日&#xff0c;2020世界人工智能大会&#xff08;WAIC&#xff09;正式拉开帷幕。当天下午&#xff0c;2020世界人工智能大会科学前沿全体会议召开&#xff0c;作为今年WAIC唯一一场聚焦前沿科技的大会&#xff0c;邀请了世界范围内最顶级的AI专家探讨技术趋势。其中&#…

ant学习笔记之(ant执行命令的详细参数和Ant自带的系统属性)

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff1a;ant执行命令的详细参数 -buildfile<file>,-file<file>,-f<file> :要指定执行构件的的位置和名称。 -find<file>,-s<file>: 查找构件文件&#xff0c;并执行找到的构件文件。…

mipi和dsi

转自&#xff1a; http://blog.csdn.net/longxiaowu/article/details/24410021 一、MIPI MIPI&#xff08;移动行业处理器接口&#xff09;是Mobile Industry Processor Interface的缩写。MIPI&#xff08;移动行业处理器接口&#xff09;是MIPI联盟发起的为移动应用处理器制定…

在asp.net中调用Office来制作各种(3D)统计图

作者&#xff1a;未知 由于本文网上多处见到 对于谁是作者 无法肯定1、下载owc11 COM组件 http://www.microsoft.com/downloads/details.aspx?FamilyID7287252c-402e-4f72-97a5-e0fd290d4b76&displaylangen 2、注册owc11 在工程中添加 C:/Program Files/Common File…