《数据库编程-操作数据.ppt》由会员分享,可在线阅读,更多相关《数据库编程-操作数据.ppt(24页珍藏版)》请在三一办公上搜索。
1、第9章BLOB数据数据操作和水晶报表,2,9.1 BLOB数据(如图片)处理,1预备知识二进制大型对象(Binary Large Object,BLOB)是指任何需要存入数据库的随机大块字节流数据,例如图形或声音文件。对于BLOB数据有两种方式存储1)文件方式:将BLOB存储在文件中,数据库中保存BLOB数据的文件路径。通过文件操作,进行图像处理2)字段方式:把图形作为数据库的一个字段值存放在数据库,用数据流方式进行图像读取操作,3,文件方式,以学生照片存储为例,每张照片是一个文件,student表中photo字类型varchar(256)保存照片文件路径步骤:1、将照片文件存到指定文件,并在
2、表中保存文件路径1)显示照片FileInfo file;/声明一个文件对象/PictureBox控件和OpenFileDialog对话框,找到照片并显示。OpenFileDialog dlg=new OpenFileDialog();dlg.Filter=.png文件|*.png|.jpg文件|*.jpg|.jpeg文件|.jpeg|.gif文件|*.gif|.bmp文件|*.bmp;if(dlg.ShowDialog()=DialogResult.OK)picphoto.Image=Image.FromFile(dlg.FileName);file=new FileInfo(dlg.File
3、Name);/给文件对象赋值,4,保存照片(文件保存到程序启动路径)/更新表 string sql=string.Format(update student set photo=0 where student_id=1,file.FullName,ds.Tablesstudent.Rowsbs.Positionstudent_id.ToString();SqlCommand cmd=new SqlCommand(sql,DBHelper.connection);DBHelper.connection.Open();int i=cmd.ExecuteNonQuery();DBHelper.con
4、nection.Close();if(i=1)/更新成功,复制图片文件 file.CopyTo(Application.StartupPath+ds.Tablesstudent.Rowsbs.Positionstudent_id.ToString()+file.Extension);ds.Tablesstudent.Rowsbs.Positionphoto=file.FullName;,5,2)读取数据表中指定记录的照片。读取数据表中当前记录photo字段的路径值。PictureBox将指定路径中的图片文件读出。if(ds.Tablesstudent.Rowsbs.Positionphoto.
5、ToString().Trim()!=string.Empty)pictureBox1.Image=Image.FromFile(ds.Tablesstudent.Rowsbs.Positionphoto.ToString();else pictureBox1.Image=null;,6,字段方式,在PictureBox控件显示Image对象时,有两种方法:PictureBox控件的DataBinding的Text直接绑定字段。2.未直接绑定到字段方法。使用Stream类进行操作。说明:Stream是数据流,包含在System.IO大类中。FileStream是用于文件操作的Stream,Me
6、moryStream 在内存封装BLOB数据,这样就能直接访问这些封装的数据。,7,BLOB数据处理方法1,1.数据绑定:在控件的属性窗口,设置pictureBox的DataBindings属性中的Image属性为BindingSource对象表中某个字段.2.显示图片:移动记录时自动会显示。3.输入或改变图片:(1)添加openFileDialog1对象(2)代码如下:if(openFileDialog1.ShowDialog()=DialogResult.OK)相片PictureBox1.Image=Image.FromFile(openFileDialog1.FileName);oleD
7、bDataAdapter1.Update(dataSet11.学籍表);,8,BLOB数据处理方法2,Stream通过一个字节类型的数组执行对文件的读写操作。使用Read或Write方法时,需要指定字节起始位置和最多处理的字节数FileStream使用格式:FileStream(文件路径,FileMode.模式,FileAccess.操作)模式为:Open、Create操作为:Read、Write,9,图形数据写入数据库步骤,1.用FileStream对象读模式打开图形文件FileStream 文件对象=New FileStream(图形文件名,FileMode.Open,FileAccess
8、.Read);2.定义字节类型的数组(大小为文件长度)Byte 数组=new Byte文件对象.Length;3.读文件到数组文件对象.Read(数组,0,(int)文件对象.Length);文件对象.Close();4.写入到数据集数据集.Tables数据表.Rows记录号“图形字段名”=数组;5.更新数据库。,10,例:将一图形文件写入当前记录的照片字段,窗体中添加OpenFileDialog1和PictureBox1控件.导入名称空间:using System.IO;输入图片代码如下:If(OpenFileDialog1.ShowDialog()=DialogResult.OK)Pict
9、ureBox1.Image=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”.Rowsthis.bindingSource.Position“photo”=b,11,从数据集读取图形数据步骤,1.将记录内的图形读到
10、字节型数组格式:byte 数组名=(byte)数据集.tables“表名”.rows记录号“图型字段名”2.将数组内容传送到Memorystream格式:System.Io.Memorystream 内存流实例=new System.Io.Memorystream(数组名)3.用的Fromstream方法将memorystream 加载到控件的图形组件属性内Picturebox1.Image=System.Drawing.Image.Fromstream(内存流实例),12,显示当前记录的照片字段,1.导入名称空间:using System.IO;2.显示的代码如下:byte ara=data
11、set11.Tables“student”.Rowsthis.bindingSource.Position“photo”MemoryStream memnew MemoryStream(ara)picturebox1.Image=Image.FromStream(mem),13,9.1 水晶报表,数据库程序开发中,大都需要报表设计。.NET提供Crystal Reports组件使创建和开发复杂报表变得非常简单。本节主要介绍Crystal Reports在C#中的使用。,14,拉模型,在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行
12、的 SQL 命令都同时由 Crystal Reports本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。,图10.25 拉模型,15,推模型,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。,图10.26 推模型,16,报表设计,Crystal Reports Designer是报表的设计工具,可以在Crystal Reports Designer中创建报表。当向项目中添加Cr
13、ystal Reports组件或双击Crystal Reports组件时,Crystal Reports Designer将自动启动。在 Crystal Report Designer 中,首先选择您的报表将要引用的数据源。在一个报表中可使用一个以上的数据源。接下来,选择要在报表中使用的数据库表。Crystal Reports可自动链接这些表,或者您可以指定链接这些表的方式。将数据库表链接以使来自一个数据库的记录与来自另一个数据库的记录相匹配。,17,创建简单报表,可以在C#中创建Windows应用程序的报表和Web应用程序的报表,并分别使用Windows窗体查看器和WEB窗体查看器查看。下面
14、我们仍以JWGL数据库作为数据源,1.创建报表2.在Windows应用程序中承载报表,18,一、创建报表,1、项目菜单/添加新项Crystal报表输入报表文件名2、使用报表向导选择新建连接/OLE DB(ADO),点击“+”号,选择“Microsoft OLE DB Provider for SQL Server”建连接)3、添加报表中用的表Table1 下一步添加报表中显示的字段下一步分组(可以不分组)指定筛选记录条件(可不做)4、选择报表样式,,19,二、在Windows应用程序中承载报表,在Windows应用程序中承载报表包括下列步骤:1、向窗体添加一个 CrystalReportVie
15、wer控件。2、设置CrystalReportViewer控件控件的Dock属性为fill,ReportSource属性为report1.rpt。若没分组,则设置DisplayView1Group属性为false.,20,报表设计设计器,Crystal Report Designer 使用类似于 Visual Studio.NET 的拖放方式,即将一个报表对象拖动到设计器(如数据库字段或文本对象)上,然后使用“属性”窗口或快捷菜单格式化该对象。Crystal Report Designer 分为若干个报表节,如报表页眉、页脚和详细信息。可将报表对象拖动到某个报表节上,并根据需要进行格式化,其中
16、包括:数据库字段、公式字段、参数字段、组名字段、运行总计字段、摘要字段、图表、子报表等。,21,9.3导出excel文件,1、项目菜单/添加引用选择COM选项卡,选择Microsft Excel Object Library 9.0(9为版本号,不同版本的Office,生成的PIA的版本也不同)。2、导入名称空间using Excel;using System.Reflection;/反射名称空间,22,3、编写将表格控件中数据导出excel的代码,private void button6_Click(object sender,EventArgs e)Excel.Application my
17、excel=new Excel.Application();/创建Excel对象 myexcel.Application.Workbooks.Add(true);/创建一个工作薄 myexcel.Visible=true;/使Excel可视 int columns=dataGridView1.Columns.Count;获得列数 int rows=dataGridView1.Rows.Count;/获得行数for(int j=0;j columns;j+)myexcel.Cells1,j+1=dataGridView1.Columnsj.HeaderText;/将dataGridView1的列
18、名做为excel表格的第一行for(int i=1;i=rows;i+)for(int j=0;j columns;j+)myexcel.Cellsi+1,j+1=dataGridView1j,i-1.Value;/导出dataGridView1的每个单元格给excel表格,23,9.4 合并项目,1、在解决方案资源管理器中,右击解决方案名/添加/现有项目。2、在解决方案资源管理器中,右击项目,设置启动项目3、在启动项目中,添加引用,选择项目选项卡/选择要合并的项目4、在启动项目中导入名称空间:using 合并的项目名,24,9.5打包发布,1、文件菜单/新建/项目2、选择其他项目类型/安装和部署安装向导输入项目名称解决方案/选择添入解决方案3、选择一种项目类型:“WINDOWS应用程序”4、选择“主输出来自*项目”(须为启动项目)5、选择要包括的文件中添加启动项目文件夹/bin/debug/启动程序文件6、重新生成解决方案7、右击安装项目名,分别进行生成、安装和卸载。8、将安装项目/bin/debug/所有文件复制到U盘或光盘即可在不同电脑上运行了,