日期:2014-05-20  浏览次数:20795 次

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