添加报表登录代码

现在即可向代码隐藏类添加登录代码。首先,创建一个私有帮助器方法 SetDBLogonForReport()。

创建 SetDBLogonForReport() 方法并编写该方法的代码

  1. 返回到此 Web 或 Windows 窗体的代码隐藏类。

  2. 在类的底部创建名为 SetDBLogonForReport() 的新私有方法,它有两个参数 ConnectionInfo 和 ReportDocument。

``` vb
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)

End Sub
```

``` csharp
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
}
```
  1. 在此方法中,从 ReportDocument 参数的 Database 属性的 Tables 属性获取 Tables 实例。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Tables 是包含 Table 类实例的索引类。</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myTables As Tables = myReportDocument.Database.Tables
```

``` csharp
Tables tables = reportDocument.Database.Tables;
```
  1. 创建一个 foreach 循环,它在 Tables 索引类实例的各个 Table 实例间循环。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>必须包含指向 Table 类的完整命名空间路径,使其与 System.Web.UI.WebControls 命名空间的 Table 类区分开来。</p></td>
</tr>
</tbody>
</table>

``` vb
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables

Next
```

``` csharp
foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
}
```
  1. 在 foreach 循环中,从 Table 实例的 LogOnInfo 属性获取 TableLogonInfo 实例。

    Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
    
    TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    
  2. 在 foreach 循环中,将 TableLogonInfo 的 ConnectionInfo 属性设置为 ConnectionInfo 参数。

    myTableLogonInfo.ConnectionInfo = myConnectionInfo
    
    tableLogonInfo.ConnectionInfo = connectionInfo;
    
  3. 在 foreach 循环中,将 TableLogonInfo 实例作为参数传递给 Table 实例的 ApplyLogonInfo 方法。

    myTable.ApplyLogOnInfo(myTableLogonInfo)
    
    table.ApplyLogOnInfo(tableLogonInfo);
    

此过程创建了用于设置数据库登录的方法。但是,必须修改 ConfigureCrystalReports() 方法以处理此方法,这样报表才能识别出其中含有数据库登录信息。

修改 ConfigureCrystalReports() 方法需要两个步骤:

  • 配置 ConnectionInfo 实例。
  • 调用 SetDBLogonForReport() 方法。

修改 ConfigureCrystalReports() 方法以处理数据库登录代码

  1. 在 ConfigureCrystalReports() 方法中,在用于将报表绑定到 CrystalReportViewer 控件的代码行之前创建几行。

  2. 在这几行中,声明并实例化 ConnectionInfo 类。

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>要使 ConnectionInfo 类可访问,必须在代码隐藏类的顶部包含 &quot;Imports&quot; [Visual Basic] 或 &quot;using&quot; [C#] 语句,引用 CrystalDecisions.Shared 命名空间。(之前在<a href="ms227453(v=vs.90).md">“项目设置”</a>中已添加此声明。)</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
```

``` csharp
ConnectionInfo connectionInfo = new ConnectionInfo();
```
  1. 设置 ConnectionInfo 实例的 DatabaseName、UserID 和 Password 属性。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>出于安全性考虑,使用访问权限受到限制的数据库帐户非常重要。有关更多信息,请参见<a href="ms227498(v=vs.90).md">“安全性:创建受限访问数据库帐户”</a>。</p></td>
</tr>
</tbody>
</table>

在编写的代码中,用自己的密码代替示例密码 1234(如下所示)。

``` vb
myConnectionInfo.DatabaseName = "Northwind"
myConnectionInfo.UserID = "limitedPermissionAccount"
myConnectionInfo.Password = "
1234"
```

``` csharp
connectionInfo.DatabaseName = "Northwind";
connectionInfo.UserID = "limitedPermissionAccount";
connectionInfo.Password = "
1234";
```
  1. 通过传递 ConnectionInfo 实例和 NorthwindCustomers 报表,输入对 SetDBLogonForReport() 方法的调用。
``` vb
SetDBLogonForReport(myConnectionInfo, northwindCustomersReport)
```

``` csharp
SetDBLogonForReport(connectionInfo, northwindCustomersReport);
```

这些代码之后即是将报表绑定到 CrystalReportViewer 控件的原始代码。

现在即可生成并运行项目。由于已经添加了登录数据库的代码,现在应该能够正确加载报表了。

测试 NorthwindCustomers 报表的加载过程

  1. 从“生成”菜单中选择“生成解决方案”。

  2. 如果生成过程中出错,请立即纠正。

  3. 从“调试”菜单中,单击“开始”。

NorthwindCustomers 报表将成功显示。
  1. 返回到 Visual Studio,然后单击“停止”从调试模式中退出。

NorthwindCustomers 报表将成功显示。