怎样从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。
[解决办法]
解决问题就好,也借此机会学习了..