BLOB数据操作与水晶报表(ppt 25页)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
4
2)读取数据表中指定记录的照片。
读取数据表中当前记录photo字段的路径值。 PictureBox将指定路径中的图片文件读出。
if (ds.Tables["student"].Rows[bs.Position]["photo"]. ToString().Trim() != string.Empty)
Crystal Reports Designer是报表的设计工具,可以 在Crystal Reports Designer中创建报表。当向项目中 添加Crystal Reports组件或双击Crystal Reports组件 时,Crystal Reports Designer将自动启动。
在 Crystal Report Designer 中,首先选择您的报表 将要引用的数据源。在一个报表中可使用一个以上的数据 源。 接下来,选择要在报表中使用的数据库表。 Crystal Reports可自动链接这些表,或者您可以指定链 接这些表的方式。将数据库表链接以使来自一个数据库的 记录与来自另一个数据库的记录相匹配。
16
9.1.1创建简单报表
可以在C#中创建Windows应用程序的报表和Web应用程 序的报表,并分别使用Windows窗体查看器和WEB窗体查看 器查看。
下面我们仍以JWGL数据库作为数据源, 1.创建报表 2.在Windows应用程序中承载报表
17
一、创建报表
1、项目菜单/添加新项—Crystal报表—输入报表文件 名
19
9.1.2 报表设计设计器
Crystal Report Designer 使 用 类 似 于 Visual Studio .NET 的拖放方式,即将一个报表对象拖动到 设计器(如数据库字段或文本对象)上,然后使用 “属性”窗口或快捷菜单格式化该对象。
Crystal Report Designer 分为若干个报表节,如 报表页眉、页脚和详细信息。可将报表对象拖动到某 个报表节上,并根据需要进行格式化,其中包括:数 据库字段、公式字段、参数字段、组名字段、运行总 计字段、摘要字段、图表、子报表等。
8
图形数据写入数据库步骤
1.用FileStream对象读模式打开图形文件
FileStream 文件对象=New FileStream(图形文件名, FileMode.Open, FileAccess.Read);
2. 定义字节类型的数组(大小为文件长度)
Byte [ ] 数组 =new Byte[文件对象.Length ];
3. 读文件到数组
文件对象.Read(数组, 0, (int) 文件对象.Length); 文件对象.Close();
4. 写入到数据集
数据集.Tables[数据表].Rows[记录号] [“图形字段名”] =数组 ; 5.更新数据库。
9
例:将一图形文件写入当前记录的照片字段
窗体中添加OpenFileDialog1和PictureBox1控件. 导入名称空间:using System.IO; 输入图片代码如下: If (OpenFileDialog1.ShowDialog() = DialogResult.OK) { PictureBox1.Image
SqlCommand cmd = new SqlCommand(sql,
DBHelper.connection);
DBHelper.connection.Open();
int i=cmd.ExecuteNonQuery();
DBHelper.connection.Close();
if (i == 1)
图10.25 拉模型
14
推模型
推模型需要开发人员编写代码以连接到数据库, 执行 SQL 命令以创建与报表中的字段匹配的记录集或 数据集,并且将该对象传递给报表。该方法使您可以 将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
图10.26 推模型
15
报表设计
3
保存照片(文件保存到程序启动路径)
//更新表
string sql = string.Format("update student set
photo='{0}' where student_id='{1}'", file.FullName, ds.Tables["student"].Rows[bs.Position]["student_id"].T oString());
18
二、 在Windows应用程序中承载报表
在Windows应用程序中承载报表包括下列步骤:
1、向窗体添加一个 CrystalReportViewer控件。 2、设置CrystalReportViewer控件控件的[Dock]属性为
[fill],[ReportSource]属性为[report1.rpt]。若没 分组,则设置DisplayView1Group属性为false.
2
9.1.1文件方式
以学生照片存储为例,每张照片是一个文件,student表中photo字类型 varchar (256)保存照片文件路径
步骤: 1、将照片文件存到指定文件,并在表中保存文件路径 1)显示照片
FileInfo file;//声明一个文件对象 { //PictureBox控件和OpenFileDialog对话框,找到照片并显示。 OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = ".png文件|*.png|.jpg文件|*.jpg|.jpeg文件|.jpeg|.gif文件
{ //更新成功,复制图片文件
file.CopyTo(Application.StartupPath+
ds.Tables["student"].Rows[bs.Position]["student_id"].T
oString()+file.Extension);
ds.Tables["student"].Rows[bs.Position]["photo"] =file.FullName;
20
9.3导出excel文件
1、项目菜单/添加引用→选择COM选项卡, →选择Microsft Excel Object Library 9.0(9为 版本号,不同版本的Office,生成的PIA的版本 也不同)。
System.Io.Memorystream(数组名) 3.用System.Drawing.Image的Fromstream方法将
memorystream 加载到控件的图形组件属性内 Picturebox1.Image=System.Drawing.Image.
Fromstream(内存流实例 )
11
oleDbDataAdapter1.Update(dataSet11.学籍表);
}
7
BLOB数据处理方法2
Stream通过一个字节类型的数组执行对文件的读 写操作。使用Read或Write方法时,需要指定字节 起始位置和最多处理的字节数 FileStream使用格式: FileStream(文件路径,FileMode.模式, FileAccess.操作) 模式为:Open、Create 操作为:Read、Write
字段。 2.未直接绑定到字段方法。使用Stream类进行操
作。
说明:Stream是数据流,包含在System.IO大类中。FileStream是 用于文件操作的Stream,MemoryStream 在内存封装BLOB数 据,这样就能直接访问这些封装的数据。
6
BLOB数据处理方法1
1.数据绑定:在控件的属性窗口,设置pictureBox的DataBindings 属性中的Image属性为BindingSource对象表中某个字段.
|*.gif|.bmp文件|*.bmp"; if (dlg.ShowDialog() == DialogResult.OK) {
picphoto.Image=Image.FromFile(dlg.FileName); file=new FileInfo(dlg.FileName);//给文件对象赋值 } }
显示当前记录的照片字段
1.导入名称空间: using System.IO; 2.显示的代码如下:
byte [] ara=dataset11.Tables[“student”]. Rows[this.bindingSource.Position][“photo”]
MemoryStream mem=new MemoryStream(ara) picturebox1.Image=Image.FromStream(mem)
第9章BLOB数据数据 操作和水晶报表
1
9.1 BLOB数据(如图片)处理
1.预备知识 二进制大型对象(Binary Large Object,BLOB) 是指任何需要存入数据库的随机大块字节流数据, 例如图形或声音文件。 对于BLOB数据有两种方式存储 1)文件方式:将BLOB存储在文件中,数据库中 保存BLOB数据的文件路径。通过文件操作,进 行图像处理 2)字段方式:把图形作为数据库的一个字段值存 放在数据库,用数据流方式进行图像读取操作
2.显示图片:移动记录时自动会显示。 3.输入或改变图片: (1)添加openFileDialog1对象 (2)代码如下:
if (openFileDialog1.ShowDialog() ==DialogResult.OK)
{ 相片PictureBox1.Image =
Image.FromFile(openFileDialog1.FileName);
=image.FromFile(OpenFileDialog1.FileName) } FileStream ime=New FileStream(OpenFileDialog1.FileName,
FileMode.Open, FileAccess.Read) Byte [] b=new Byte [ime.Length] ime.Read(b, 0, (int)ime.Length) ime.Close() Dataset11.Tables [“student”].Rows[this.bindingSource.Position]
12
9.1 水晶报表
数据库程序开发中,大都需要报表设计。.NET提 供Crystal Reports组件使创建和开发复杂报表变得 非常简单。本节主要介绍Crystal Reports在C#中的 使用。
13
拉模型
在拉模型中,驱动程序将连接到数据库并根据需 要将数据“拉”进来。使用这种模型时,与数据库的 连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports本身处理,不需要开发人员编写代码。 如果在运行时无须编写任何特殊代码,则使用拉模型。
pictureBox1.Image = Image.FromFile(ds.Tables["student"].Rows[bs.Position] ["photo"].ToString());
else pictureBox1.Image=null;
5
9.1.2字段方式
在PictureBox控件显示Image对象时,有两种方法: 1. PictureBox控件的DataBinding的Text直接绑定
2、使用报表向导 选择新建连接/[OLE DB (ADO)],点击“+”号,选择
“Microsoft OLE DB Provider for SQL Server” 建连 接) 3、添加报表中用的表Table1 下一步添加报表中显示 的字段下一步分组(可以不分组) 指定筛选记录条件 (可不做) 4、选择报表样式,
[“photo”] =b
10
Байду номын сангаас
从数据集读取图形数据步骤
1.将记录内的图形读到字节型数组
格式: byte [] 数组名= (byte[]) 数据集.tables[“表
名”].rows[记录号][“图型字段名”] 2.将数组内容传送到Memorystream 格式: System.Io.Memorystream 内存流实例=new