读书人

怎样从Access数据库中读取图片?解决办

发布时间: 2012-03-02 14:40:29 作者: rapoo

怎样从Access数据库中读取图片?

//从数据库中获取 二进制大对象 (BLOB) 值
public void GetBLOB()
{
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();

conn.ConnectionString = @ "Provider=Microsoft.Jet.OLEDB.4.0; " +
@ "Data source= C:\Program Files\Microsoft Office\OFFICE11
\SAMPLES\ " +@ "Northwind.mdb ";
OleDbCommand cmd = new OleDbCommand( "SELECT 类别ID,图片 FROM 类别 ", conn);


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 category_id = " "; // The category id to use in the file name.

conn.Open();

OleDbDataReader myReader = cmd.ExecuteReaderCommandBehavior.SequentialAccess);

while (myReader.Read())
{
// Get the category id, which must occur before getting the logo.
category_id = myReader.GetInt32(0).ToString();

Console.WriteLine( "类别ID = {0} ", category_id);

// Create a file to hold the output.
fs = new FileStream( "category " + category_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, 0, (int)retval - 1);
bw.Flush();

// Close the output file.
bw.Close();
fs.Close();
}

// Close the reader and the connection.
myReader.Close();
conn.Close();
}

这个函数能够正常运行,但执行之后,保存在硬盘上的BMP文件都是无效的,根本打不开。
这是什么原因呢?还有我要是在PictureBox中显示读取的位图该怎么做?
请按我给的方法来,使用OleDbDataReader。

[解决办法]
解决问题就好,也借此机会学习了..

读书人网 >C#

热点推荐