C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(三)

从数据库中取出图片二进制流,显示到水晶报表中

mark:关于VS2012(2010)水晶报表的使用可阅读我写的这篇文章:C#中如何使用水晶报表http://blog.csdn.net/qq_22889875/article/details/77017551
阅读了前面的(一)(二)文章,相信都学会了如何将图片二进制流保存到数据库中,现在来学习下如何从数据库中读取二进制流,并将图片成功显示到水晶报表中。
1、从数据库中读取图片二进制流,这里只选取了一条记录(记得添加引用:MySql.Data.dll)。
代码如下:

 MySqlConnection conn = new MySqlConnection();
 string connString = "Server = localhost;Database = test;Uid = root;Pwd = root1234";
 conn.ConnectionString = connString;
 conn.Open();
 MySqlDataAdapter da = new MySqlDataAdapter();
 MySqlCommand cmd = new MySqlCommand("select image_path from image_path where id = 1", conn);
 MySqlDataReader dr = cmd.ExecuteReader();
 byte[] imagebytes = null;
 while (dr.Read())
 {
   imagebytes = (byte[])dr.GetValue(0);
 }

2、用二进制流显示图片到水晶报表中,可利用DataSet为中介,先将取出的二进制流保存到DataSet中,然后在水晶报表中添加DataSet中的图片元素。
操作步骤如下:
1)在项目名称上右键->添加->新建项->数据->数据集,如下图所示:
这里写图片描述
成功生成xsd文件:
这里写图片描述
双击该xsd文件,在界面中右键->添加数据表,然后在表中右键->添加->列,给列命名为pic1,点击该变量,右键->属性,修改其类型为System.Byte[],对应水晶报表中字段类型Blob,保存;
2)在项目名称上右键->添加->新建项,新建一个空白水晶报表CrystalReport1.rpt,如图:
这里写图片描述
双击该rpt文件,在打开界面空白处右键->数据库->数据库专家,选择如下图:
这里写图片描述
点击选择文件路径后的三个点,选中之前新建的xsd文件,如图:
这里写图片描述
点击完成,选择DataTable1,点击“>”,如图,确定,将之前新建的DataSet1表添加到水晶报表中
这里写图片描述
选中新建的表DataTable1,打开水晶报表的字段资源管理器,如图:
这里写图片描述
用鼠标将数据库字段pic1拖到水晶报表空白处(位置根据自己需求定,可随意拖动),效果如图:
这里写图片描述
同时,也可在水晶报表中添加参数字段,我这里加了个name字段,将name字段拖到图片下方,用来给图片命名
如图:
这里写图片描述
到此,Dataset成功添加到水晶报表中。
3)双击Form1.cs,在打开的Form1界面中,选择工具箱中的水晶报表选项,插入一个水晶报表,右键->选择crystal报表,如图:
这里写图片描述
将建好的CrystalReport1.rpt添加到Form1.cs中
4)编写代码:
Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data;
using MySql.Data.MySqlClient;

namespace imageToCReport
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            MySqlConnection conn = new MySqlConnection();
            string connString = "Server = localhost;Database = test;Uid = root;Pwd = root1234";
            conn.ConnectionString = connString;
            conn.Open();
            MySqlDataAdapter da = new MySqlDataAdapter();
            MySqlCommand cmd = new MySqlCommand("select image_path from image_path where id = 1", conn);
            MySqlDataReader dr = cmd.ExecuteReader();
            byte[] imagebytes = null;
            while (dr.Read())
            {
              imagebytes = (byte[])dr.GetValue(0);
            }
            imageToCR(imagebytes);
        }
        public void imageToCR(byte[] imagebytes )
        {
            DataSet1 d = new DataSet1();
            DataRow r = d.Tables["dataTable1"].NewRow();
            r[0] = imagebytes ;
            d.Tables["dataTable1"].Rows.Add(r); //将图片1二进制流加入到DataSet中的表dataTable1中
            CrystalReport1 cr = new CrystalReport1();
            cr.SetDataSource(d);
            cr.SetParameterValue("name","阿狸");  //给图片命名
            crystalReportViewer1.ReportSource = cr;
        }
    }
}

5)运行代码,会报异常,如图:
这里写图片描述
双击App.config,在标签startup中设置属性,useLegacyV2RuntimeActivationPolicy=”true”,如图:
这里写图片描述
运行程序,成功显示图片,结果如图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值