现在知道在Access中手动插入OLE对象和代码存入OLE字段是不同的,代码方式存入的比较好读取,可是我现在是用手动插入的,读取的时候出现问题,那么现在想请教下:用C#怎么读[b]手动插入的OLE字段[/b]中的图片,比如:JPG的。并显示到PictureboX里面。查了好多帖子,没发现这个解决办法。

解决方案 »

  1.   

    System.IO.Stream fs= FileUpload1.PostedFile.InputStream;
    int fileLength = FileUpload1.PostedFile.ContentLength;
    byte[] buffer= new byte[fileLength];
    fs.Read(buffer, 0, fileLength);command.Parameters.AddWithValue("@Photo", buffer);
      

  2.   

    手工插入的数据,需要先处理一下才能进行显示,参见http://dotnet.aspx.cc/file/Removing-OLE-Header-from-images-stored-in-MS-Access-DB-as-OLE-Object.aspx
      

  3.   

    你的回复对我很有帮助,十分感谢您的回复!那么我想再请教你两个问题,一:文本文件是否存在相似的问题?你给的网页里讲的是图片,那文本需要去文件头吗?比如:Word,txt文件...
        二:如果我的数据库里面的文件既有手动存入的又有代码读的,那么我如何判断一个文件是那种方式存入的呢?谢谢!
      

  4.   

    我补充一个问题:我用你给的这个网页中的函数来读OLE中的图片,可是这个去掉文件头的函数首先就要OLE字段的byte[]类型,这个得用OleDbReader来获得,这一步就没办法得到。
        我的代码是:
     
            public static Image GetImage(string sqlStr, string nameOleFiled)
            {
                OleDbDataReader Rd = GetExecuteReader(sqlStr);            byte[] bData = (byte[])Rd[nameOleFiled];//这里就出错了,怎么执行去文件头呢?
                bData = GetImageBytesFromOLEField(bData);//这里是去文件头的函数
                try
                {
                    MemoryStream ms = new MemoryStream(bData);
                    Image iImage=Image.FromStream(ms,true);
                    return iImage;
                }
                catch (System.IO.IOException e)
                {
                    throw new Exception(e.Message + "Read image data error!");
                }
            }
    报的错误是:
    未处理的“System.InvalidOperationException”类型的异常出现在 System.Data.dll 中。
    其他信息: 不存在此行/列的数据。
        这个错误和开始的一样,我想也是OLE字段读取的问题。头一步没有读出Byte[]那么怎么执行去文件头呢?
     请问:这个问题您解决了吗?能不能详细指点一下。谢谢!