知识大全 C#中读取数据库中Image数据

Posted

篇首语:生活的理想,就是为了理想的生活。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中读取数据库中Image数据相关的知识,希望对你有一定的参考价值。

C#中读取数据库中Image数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  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 = The size of the BLOB buffer   Dim outbyte(bufferSize ) As Byte The BLOB byte() buffer to be filled by GetBytes   Dim retval As Long The bytes returned from GetBytes   Dim startIndex As Long = 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( )     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 =      Read bytes into outbyte() and retain the number of bytes returned   retval = myReader GetBytes( startIndex outbyte 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( startIndex outbyte 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 = ; // 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 = ; // 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( );    // 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 = ;    // Read the bytes into outbyte[] and retain the number of bytes returned   retval = myReader GetBytes( startIndex outbyte 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( startIndex outbyte 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(); cha138/Article/program/net/201311/12026

相关参考

知识大全 c#通过网线读取三菱PLC数据

c#通过网线读取三菱PLC数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  publicsta

知识大全 数据读取器[1]

C#高级编程:数据读取器[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 数据读取器[2]

C#高级编程:数据读取器[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 在VC++应用程序中读取文本数据

在VC++应用程序中读取文本数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们通常把数据存

知识大全 使用PL/SQL从数据库中读取BLOB对象

使用PL/SQL从数据库中读取BLOB对象  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  确认现

知识大全 ASP.NET数据读取填充方式

ASP.NET数据读取填充方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在中读取数据库中的

知识大全 java中如何把图片转换成二进制流

   将Image图像文件存入到数据库中我们知道数据库里的Image类型的数据是二进制数据因此必须将图像文件转换成字节数组才能存入数据库中  &nbs

知识大全 数据库中与C#中的数据类型对照

数据库中与C#中的数据类型对照  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ///<su

知识大全 c#中连接ODBC数据库

c#中连接ODBC数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    usingSyste

知识大全 c#获取数据库中所有表名称的方法

  在很多情况下我们需要将指定的数据库中的所有表都列出来在使用c#进行软件开发时我们有哪些方法可是实现这个目的呢?本人对此进行概要的总结有以下中方式可以实现这个目的  1sqldmo  SQLDMO是