教程:连接到 IDataReader
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教程:连接到 IDataReader
简介
许多 .NET 项目使用 DataReader 而不是 DataSet 来检索数据。
例如,将控件(例如,GridView 控件)绑定到数据的一种典型方法是:创建一个通过 DataReader 检索数据的方法,然后通过IDataReader 接口从此方法返回检索数据。
在 Crystal Reports for Visual Studio 中,如果满足以下特定条件,嵌入式 Crystal Reports 设计器就可以访问 IDataReader:
∙数据必须通过 IDataReader 接口从一个方法中返回。
∙方法中使用的数据提供程序必须是 OleDb .NET 数据提供程序。
注意
∙方法必须是共享 [Visual Basic] 或静态 [C#]。
∙包含此方法的类必须是类库项目的一部分,并且被编译到一个程序集中。
在本教程中,您将学习如何将 Crystal 报表连接到 DLL 程序集文件,以及如何访问程序集内的类和返回 IDataReader 的静态方法。
要开始,请创建一个类库,添加一个类和一个返回 IDataReader 的静态方法,然后将该类库编译到程序集中。
示例代码
此教程附带 Visual Basic 和 C# 示例代码,这些代码显示了项目完成后的版本。
请按照本教程中的说明创建新项目或打开示例代码项目,以利用完成后的版本进行工作。
示例代码保存在按语言和项目类型分类的文件夹中。
各示例代码版本的文件夹名称如下:
∙C# 网站:CS_Web_Data_IDataReader
∙C# Windows 项目:CS_Win_Data_IDataReader
∙Visual Basic 网站:VB_Web_Data_IDataReader
∙Visual Basic Windows 项目:VB_Win_Data_IDataReader
欲知包含这些示例的文件夹的位置,请参见“教程的示例代码目录”。
创建类库
使用本教程之前,必须进行以下设置。
数据库设置准备工作
1. SQL Server 配置:
o如果安装了 SQL Server(或其 OEM 版本:MSDE),则必须配置为要求 SQL Server 身份验证。
o如果未安装 SQL Server(或其 OEM 版本:MSDE),则必须安装 MSDE,并将 SQL Server 身份验证设置为 True。
2.必须安装 SQL Server 附带的 Northwind 数据库,并确认该数据库要求 SQL Server 身
份验证。
3.必须创建受限访问帐户以在网站内使用。
创建包含返回 IDataReader 的静态方法的类库
若要安装使用 SQL Server 身份验证的 MSDE 或 Northwind 数据库,请从本文档中的“系统设置”部分转至以下各节:
∙“使用 Windows or SQL Server 身份验证的 MSDE 安装”
∙“Northwind 数据库安装”
∙“安全性:创建受限访问数据库帐户”
一旦配置好了 SQL Server 和 Northwind 数据库,就可以创建从 Northwind 数据库返回值(作为 IDataReader)的类库了。
注意
1.从“文件”菜单中,指向“新建”,然后单击“项目”。
2.在“新建项目”对话框的“项目类型”列表中为 C# 或 Visual Basic 选择语言文件夹。
3.从“模板”列表中,单击“类库”。
4.在“名称”字段中,将默认项目名称替换为 "VB_Lib_DataLayer" [Visual
Basic] 或 "CS_Lib_DataLayer" [C#],然后单击“确定”。
5.在“解决方案资源管理器”中,右击默认类(Class1),然后单击“删除”。
6.在“解决方案资源管理器”中,右击用粗体显示的项目名,指向“添加”,然后单击“类”。
7.在“添加新项”对话框的“模板”视图中,选择名为“类”的模板。
8.在“名称”字段中,键入“DataCenter”,然后单击“添加”。
9.如果使用的是 Visual Basic,请在类的顶部键入 Option Strict On。
10.如果还没有声明 System.Data 和 System.Data.OleDb 命名空间,则在类签名之上,
向类顶部为这些命名空间添加 "Imports" [Visual Basic] 或 "using" [C#] 声明。
VB
Imports System.Data
Imports System.Data.OleDb
11.在类级别,为 OleDb 连接字符串创建一个专用字符串常量。
注意
12.在编写的代码中,请将示例服务器名称 DBServer01 和示例密码 1234(如下所示)替
换为您的数据库的服务器名称和密码。
13.VB
14.
15.Private Const OLEDB_CONNECTION_STRING As String =
16."provider=sqloledb;Data Source=DBSERVER01;Initial
17.Catalog=Northwind;User
Id=limitedPermissionAccount;Password=1234"
18.
19.为数据库查询创建第二个专用字符串常量。
VB
Private Const CUSTOMER_TABLE_QUERY As String= "SELECT CustomerID, CompanyName, ContactName, Address, City FROM Customers"
20.创建一个返回 IDataReader 名为 GetCustomersUsingOleDb() 的 "Shared" [Visual
Basic] 或 "static" [C#] 公用方法。
VB
Public Shared Function GetCustomersUsingOleDb() As IDataReader End Function
21.在此方法中,声明并实例化 OleDbConnection 并传递 OLEDB_CONNECTION_STRING 常
量。
VB
Dim myOleDbConnection As OleDbConnection = New
OleDbConnection(OLEDB_CONNECTION_STRING)
22.从 OleDbConnection 实例调用 Open() 方法以打开数据库连接。
VB
myOleDbConnection.Open()
23.声明并实例化 OleDbCommand 并传递 CUSTOMER_TABLE_QUERY 常量和
OleDbConnection 实例。
VB
Dim myOleDbCommand As OleDbCommand = New
OleDbCommand(CUSTOMER_TABLE_QUERY, myOleDbConnection)
24.调用 OleDbCommand 实例的 ExecuteReader() 方法,并将其传递到 IDataReader 的
实例。
VB
Dim myIDataReader As IDataReader = myOleDbCommand.ExecuteReader()
25.从该方法中返回 IDataReader 实例。
VB
Return myIDataReader
26.从“生成”菜单中,单击“生成解决方案”。
27.从“文件”菜单中,单击“关闭解决方案”。
将报表连接到IDataReader 静态方法
在本节中,您将创建一个访问已编译程序集中的 IDataReader 的客户端项目。
将报表连接到 IDataReader 静态方法
此过程仅适用于已通过“项目设置”创建的项目。
“项目设置”包含此过程需要的特定命名空间引用和代码配置。
如果没有该配置,将无法完成此过程。
因此,在开始此过程之前,必须首先执行“项目设置”中的步骤。
1.在“解决方案资源管理器”中,右击粗体显示的项目名,指向“添加”,然后单击“新
建项”。
2.在“添加新项”对话框中,选择“Crystal 报表”。
3.在“名称”字段中,输入“CustomersViaIDR.rpt”,然后单击“确定”。
4.在“Crystal Reports 库”对话框中,单击“确定”。
5.在“标准报表创建向导”对话框中,展开“创建新连接”节点。
6.展开“”节点。
7.在“”对话框中,单击“文件路径”文本字段末尾的“...”。
8.在“打开”对话框中,将“文件类型”列表设置为“所有文件”。
9.从下面的文件目录路径中找到 DLL 程序集。
注意
10.C#
11.VB
12.
13.\My Documents\Visual
Studio\Projects\VB_Lib_IDataReader\VB_Lib_IDataReader\bin\VB_Li b_DataLayer.dll
14.
15.选择 DLL,然后单击“打开”。
16.从“类名”类别中,选择“DataCenter”类,然后单击“完成”。
在“可用数据源”区域,GetCustomersUsingOleDB() 方法将会出现。
17.选择“GetCustomersUsingOleDb”,单击“>”按钮,以将该方法移入“选定的表”面
板,然后单击“下一步”。
如果还未正确配置 IDataReader 类库,则会引发异常。
处理异常
在本节中,将学习如何处理可能会由类库 IDataReader 方法引发的异常。
1.关闭网站或 Windows 项目,然后重新打开包含 IDataReader 静态方法的类库项目。
注意
2.查看连接字符串常量以检查数据库服务器名称或密码中的错误。
3.查看查询字符串常量以检查查询中的错误。
4.从“生成”菜单中,单击“生成解决方案”。
5.从“文件”菜单中,单击“关闭解决方案”。
6.重新打开网站或 Windows 项目。
7.删除已创建的 Crystal 报表文件,然后创建一个新的 Crystal 报表。
8.重复上一节“将报表连接到 IDataReader 静态方法”中的步骤。
GetCustomersUsingOleDb() 方法已成功传送到“选定的表”面板中。
注意
根据来自 IDataReader 静态方法的值设计报表
现在,您已准备好根据来自 IDataReader 静态方法的值设计报表。
注意
1.在“可用字段”面板中,展开“GetCustomersUsingOleDb”。
2.按下 Ctrl 并单击 CompanyName、ContactName 和 City。
3.单击“>”符号,将这些字段移至“要显示的字段”面板,然后单击“下一步”。
4.在“可用字段”面板的“报表字段”下,选择 GetCustomerUsingOleDb.City,并单击 > 符
号将该字段移动到“分组依据”面板中,然后单击“完成”。
CustomersViaIDR 报表已创建,并已加载到 Visual Studio 的主窗口中。
5.单击“主报表预览”以预览基于对“IDataReader”静态方法的调用的报表。
现在,可以将报表绑定到 CrystalReportViewer 控件了。
绑定报表
在“项目设置”中,已经在 Web 或 Windows 窗体上放入了 CrystalReportViewer 控件。
在上一步中,已给项目添加了 CustomersViaIDR 报表。
在本节中,将实例化 CustomersViaIDR 报表,并将其绑定到 CrystalReportViewer 控件。
可以采用两种方式实例化并绑定报表:
∙作为嵌入式报表。
∙作为非嵌入式报表。
从下面的过程中选择一个(不要两者都选)。
∙如果使用嵌入式报表,请按照下一个过程将 CustomersViaIDR 报表实例化为嵌入式报表。
∙如果使用非嵌入式报表,请按照第二个过程将 CustomersViaIDR 报表实例化为非嵌入式报表。
将 CustomersViaIDR 报表实例化为嵌入式报表并将其绑定到CrystalReportViewer 控件
1.打开 Web 或 Windows 窗体。
2.从“视图”菜单中,单击“代码”。
3.使用变量名 customersViaIdrReport,为 CustomersViaIDR 报表包装类添加新的类级
声明。
将其访问修饰符设置为 private。
VB
Private customersViaIdrReport As CustomersViaIDR
4.在 ConfigureCrystalReports() 方法中,实例化该报表包装类。
注意
5.VB
6.
7.customersViaIdrReport = New CustomersViaIDR()
8.
9.在报表实例化代码下面的一行中,将 CrystalReportViewer 控件的 ReportSource 属
性绑定到经过实例化的报表类(变量名:customersViaIdrReport)。
VB
myCrystalReportViewer.ReportSource = customersViaIdrReport
将 CustomersViaIDR 报表实例化为非嵌入式报表并将其绑定到CrystalReportViewer 控件
现在即可生成并运行项目。
跳到下一节。
1.打开 Web 或 Windows 窗体。
2.从“视图”菜单中,单击“代码”。
3.使用变量名 customersViaIdrReport,为 ReportDocument 报表包装类添加新的类级
声明。
将其访问修饰符设置为 private。
注意
4.VB
5.
6.Private customersViaIdrReport As ReportDocument
7.
8.在 ConfigureCrystalReports() 方法(在“项目设置”中创建)中,实例化
ReportDocument 类。
VB
customersViaIdrReport = New ReportDocument()
9.声明一个字符串变量,将其命名为“reportPath”,然后将一个本地报表的运行时路
径赋值给它。
对于网站项目和 Windows 项目,确定此路径时会有所不同:
o对于网站,要将本地报表文件的名称作为字符串参数传递
到 Server.MapPath() 方法中。
这样,在运行时本地报表就会映射到硬盘文件
目录路径。
VB
Dim reportPath As String =
Server.MapPath("CustomersViaIDR.rpt")
o对于 Windows 项目,要将 Application.StartupPath 属性与一个反斜杠和本地报表文件名称连接起来。
这样,报表将映射到与 Windows 可执行文件相同的
目录。
注意
o VB
o
o Dim reportPath As String= Application.StartupPath & "\"
&
o"CustomersViaIDR.rpt"
o
10.调用 ReportDocument 实例的 Load() 方法,并将 reportPath 字符串变量传递给该
方法。
VB
customersViaIdrReport.Load(reportPath)
11.在报表加载部分的下一行中,将 CrystalReportViewer 的 ReportSource 属性绑定到
ReportDocument 实例。
VB
myCrystalReportViewer.ReportSource = customersViaIdrReport
测试 CustomersViaIDR 报表的加载过程
无论选择通过 ReportDocument 类实例化嵌入式报表类还是实例化非嵌入式报表类,所用的变量名都是同一个:customersViaIdrReport。
这使得在后面的过程中可以使用一组公共代码。
现在即可生成并运行项目。
1.从“生成”菜单中选择“生成解决方案”。
2.如果生成过程中出错,请立即纠正。
3.如果要在 Windows 项目中使用非嵌入式报表,请在 \bin\ [Visual Basic] 子目录
或 \bin\debug\ [C#] 子目录中找到编译后的 Windows 可执行文件,然后将报表复制到该子目录。
注意
4.从“调试”菜单中,单击“开始”。
报表即会显示,从中可看到来自 IDataReader 静态方法的数据。
5.返回到 Visual Studio,然后单击“停止”从调试模式中退出。