首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-03-02 
怎样从Access数据库中读取图片?//从数据库中获取二进制大对象(BLOB)值publicvoidGetBLOB(){System.Data.Ol

怎样从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。

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

热点排行