如何用C#将图片上到Access
最近自己做紧个校友录~~~
但有个地方不会就是将图片上到Access的并且可以通过按钮来读取显示~~~
并可以在listbox控件显示所有的图片~~~在listbox控件中点击图片名就会显示图片~~~要WinForm的~~不要ASP~~

解决方案 »

  1.   

    图片可以以2进制读到access中,也可以只保存图片的路径
      

  2.   

    用mdb不好吗,为什么一定要用access呢。
      

  3.   

    将保存图片的字段设置成text类型的,然后将图片的完整路径当作字符串保存到该字段中。
    使用时可以这样:
    比如字段名为 ImageFile,那么代码可以这样写:
    //...
    string imageFileName = dataTable.Rows[0]["ImageFile"].ToString();
    Image img = Image.FromFile(imageFileName);
    pbImage.Image = img;
    //...pbImage是一个PictureBox控件
      

  4.   

    忘了第二个问题,抱歉!
    在ListBox里单击显示图片可以这样做:
    你将所有图片设置成一样大小的,然后动态放到一个ImageList控件中:代码如下:
      int index = 0;
                lvwHeader.Items.Clear();
                imgLstHeader.Images.Clear();
                List<string> fileNameList = FileDirectoryOper.GetImageFileNames(Application.StartupPath + @"\pictures");
                foreach (string fileName in fileNameList)
                {
                    Image image = Image.FromFile(fileName);
                    imgLstHeader.Images.Add(image);
                    string file = FileDirectory.FileDirectoryOper.GetFileName(fileName);
                    ListViewItem item = new ListViewItem(file);
                    item.ImageIndex = index;
                    lvwHeader.Items.Add(item);
                    index++;
                }
    这里使用的是ListView,不过道理是一样的,用文件名做列项名,将ListBox的ImageList属性设置成代码中的ImageList项,这样就能在ListBox里显示图片了。
      

  5.   

    //将C#数据以长二进制数据保存于Access数据库northwind.mdb   
      using   System;   
      using   System.IO;   
      using   System.Data;   
      using   System.Data.OleDb;   
        
      class   BLOBDemo   
      {   
      [STAThread]   
      static   void   Main(string[]   args)   
      {   
      Add("Test","2.jpg");   
      }   
        
      public   static   void   Add(string   categoryName,   string   filePath)   
      {   
        
      FileStream   fs   =   new   FileStream(filePath,   FileMode.Open,   FileAccess.Read);   
      BinaryReader   br   =   new   BinaryReader(fs);   
        
      byte   []   photo   =   br.ReadBytes((int)fs.Length);   
        
      br.Close();   
      fs.Close();   
        
      OleDbConnection   cn   =   new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=northwind.mdb");   
      OleDbCommand   cmd   =   new   OleDbCommand("INSERT   INTO   类别(类别名称,   图片)   VALUES   (@CategoryName,   @Picture)",   cn);   
        
      cmd.Parameters.Add("@CategoryName",   OleDbType.VarChar,15).Value   =   categoryName;   
      cmd.Parameters.Add("@Picture",   OleDbType.Binary,   photo.Length).Value   =   photo;   
        
      cn.Open();   
      cmd.ExecuteNonQuery();   
      cn.Close();   
      }   
      }   
    //从Access数据库northwind.mdb取出长二进制数据   
      using   System;   
      using   System.IO;   
      using   System.Data;   
      using   System.Data.OleDb;   
        
      class   BLOBDemo   
      {   
      [STAThread]   
      static   void   Main(string[]   args)   
      {   
        
      OleDbConnection   cn   =   new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=northwind.mdb");   
      OleDbCommand   cmd   =   new   OleDbCommand("Select   类别ID,图片   FROM   类别   where   类别名称='Test'",   cn);   
        
      FileStream   fs;   
      BinaryWriter   bw;   
        
      //缓冲区大小   
      const   int   bufferSize   =   100;   
      byte   []   outByte   =   new   byte[bufferSize];   
      //GetBytes返回的字节数量   
      long   retval   =   0;   
      //BLOB输出的起始位置   
      long   startIndex   =   0;   
        
      string   id   =   "";   
        
      cn.Open();   
        
      OleDbDataReader   dr   =   cmd.ExecuteReader(CommandBehavior.SequentialAccess);   
        
      while(dr.Read())   
      {   
      id   =   dr.GetValue(0).ToString();   
        
      fs   =   new   FileStream(id   +   ".bmp",   FileMode.OpenOrCreate,   FileAccess.Write);   
      bw   =   new   BinaryWriter(fs);   
        
      startIndex   =   0;   
      retval   =   dr.GetBytes(1,   startIndex,   outByte,   0,   bufferSize);   
      while(retval   ==   bufferSize)   
      {   
      bw.Write(outByte);   
      bw.Flush();   
      startIndex   +=   bufferSize;   
      retval   =   dr.GetBytes(1,   startIndex,   outByte,   0,   bufferSize);   
      }   
        
      bw.Write(outByte,   0,   (int)retval   -   1);   
      bw.Flush();   
        
      bw.Close();   
      fs.Close();   
      }   
        
      dr.Close();   
      cn.Close();   
      }   
      }   
      
      

  6.   

    先谢谢LS的几位大哥???
    我比较蠢~~还是不理解
    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);   
    BinaryReader   br   =   new   BinaryReader(fs);   
    byte   []   photo   =   br.ReadBytes((int)fs.Length); fs   =   new   FileStream(id   +   ".bmp",   FileMode.OpenOrCreate,   FileAccess.Write);   
    bw   =   new   BinaryWriter(fs);   
        
    startIndex   =   0;   
    retval   =   dr.GetBytes(1,   startIndex,   outByte,   0,   bufferSize);   
      

  7.   

    大侠可以做到这个上传图片的应用程序的代码吗????可以的话~~能吧代码发到我的[email protected]邮箱吗???