首页 新闻 会员 周边 捐助

C#如何将ACCESS数据库MDB中的长二进制数据(存的是图片)还原到本地文件夹

0
悬赏园豆:50 [已解决问题] 解决于 2016-07-07 16:53
 bool isSuccess = false;
                List<ImageConvert> infoList = new List<ImageConvert>();        
                DataTable dt = ReadDataByColumns(Server.MapPath("~/Images/data(pic).mdb"), "pic", ref isSuccess);
                for (int i = 0; i < dt.Rows.Count;i++ )
                {
                    try
                    {
                    string path = Server.MapPath("~/Images/");
                    if (!System.IO.Directory.Exists(path + dt.Rows[i]["UID"].ToString()))
                    {
                        System.IO.Directory.CreateDirectory(path + dt.Rows[i]["UID"].ToString());
                    }
                    ImageConvert iConvert = new ImageConvert();
                   var buff= iConvert.picture= Encoding.UTF8.GetBytes(dt.Rows[i]["PIC"].ToString());
                   MemoryStream ms = new MemoryStream(buff);
                   System.Drawing.Image newImage = System.Drawing.Image.FromStream(ms);
                   newImage.Save(Server.MapPath(path + dt.Rows[i]["UID"].ToString() + "/" + dt.Rows[i]["FileName"].ToString()), System.Drawing.Imaging.ImageFormat.Jpeg);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }

这样子会报错,参数无效,有人吗?

SUKHOIIII的主页 SUKHOIIII | 初学一级 | 园豆:11
提问于:2016-07-07 11:29
< >
分享
最佳答案
0

你设置个断点,看看buff这个变量是不是二进制数据

收获园豆:50
刘宏玺 | 专家六级 |园豆:14020 | 2016-07-07 11:34

关键这个是以前的ACCESS数据库,以前是怎么样存进去的,我完全不知道,是不是序列化,或者有加密什么的,就更不知道了,反正是报错,你说的确实是报错的地方!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 11:46

@长江边卖水的小货车: 

你这样写

var buff=dt.Rows[i]["PIC"] as byte[]

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 12:10

@刘宏玺: 报错了,缓存区为空

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 15:11

@长江边卖水的小货车: 你把buff的数据给我看看我才能分析出来是什么原因

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 15:36

@刘宏玺: 我调试的时候,显示buff为null,一直都没有值!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 15:55

@长江边卖水的小货车: 没有值不报错才怪了。。。那你查查为啥没有值

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 15:56

@刘宏玺: dt.Rows[i]["PIC"] as byte[]这里的["PIC"]是system.Byte[]

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 15:57

@刘宏玺: 这个上传图片还得申请博客,我也是醉醉的!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:06

@刘宏玺: 

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:16

@长江边卖水的小货车: var buff=dt.Rows[i]["PIC"] as byte[]

这句话后buff长啥样呢?

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 16:17

@刘宏玺: 

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:25

@长江边卖水的小货车: 给是数据库里面的这个字段就是空的?

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 16:26

@刘宏玺: 不是啊,是有值的,

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:30

@长江边卖水的小货车: 

给是你的这个方法ReadDataByColumns不支持二进制的读取

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 16:33

@刘宏玺: 啊?这个我还真的不知道,我其他的都导入到数据库了,就这个二进制的不行,不知道是不是真的就不支持二进制,你有其他读二进制的方法吗?我在网上找了一圈感觉都不行!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:35

@长江边卖水的小货车: 我有个集成好的,抽不出来。。。

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-07 16:45

@刘宏玺: 好吧,谢谢你的耐心回答

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-07 16:53

@刘宏玺: 我的已经读出来了,确实是我的方法的问题,读不出二进制的数据,换了个方法果然弄好了,谢谢你的回答!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-08 13:28

@长江边卖水的小货车: 这都是你自己努力的结果!我都没帮上什么忙!

刘宏玺 | 园豆:14020 (专家六级) | 2016-07-08 13:31

@刘宏玺: 肯定有啊,问题都是一步一步的意识到并解决的,总之谢谢你的热情,哈哈!

SUKHOIIII | 园豆:11 (初学一级) | 2016-07-08 14:12
其他回答(1)
0

请问楼主最后怎么解决的?

yujq92 | 园豆:202 (菜鸟二级) | 2018-07-20 15:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册