使用 C1Report 控件 > 高级功能 > 数据安全性 > 创建定义应用程序的别名 |
另一种可能的情况是,你要允许某些用户看到报表,但不想给他们任何特殊的权限或有关数据存储的信息。
C1Report提供了两种简单的方式实现这一目标。 一种是使用嵌入式报表。 设计时,在应用程序中加载报表定义,使用加载报表(Load Report)对话框,该报表将被嵌入到应用程序中。使用这种方法您就不必分发报表定义文件,就没有用户会访问到数据源的信息。
第二种方法是为你的应用程序定义了一组连接字符串的别名。 报表定义文件将包含别名,应用程序在渲染报表前,会使用实际的连接字符串来替换它。 别名在任何其他应用程序中是没有用的(如C1ReportDesigner)。这取决于你关心安全性的程度, 您还可以在记录源属性进行检查,以确保没有人试图获得未经授权的数据库中的某些表或字段。
下面的代码显示了如何实现一个简单的别名方案:
To write code in Visual Basic
Visual Basic |
拷贝代码
|
---|---|
Private Sub RenderReport(strReportName As String) ' load report requested by the user c1r.Load("c:\Reports\MyReports.xml", strReportName) ' replace connection string alias Dim strConn$ Select Case c1r.DataSource.ConnectionString Case "CUSTOMERS" Case "EMPLOYEES" strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\SecureData\People.mdb;" & _ "Password=slekrsldksd;" Case "$$SALES" strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\SecureData\Numbers.mdb;" & _ "Password=slkkdmssids;" End Select ' set connection string, render report c1r.DataSource.ConnectionString = strConn ppv1.Document = c1r End Sub |
To write code in C#
C# |
$$copyCode$$
|
---|---|
private void RenderReport(string strReportName) { // load report requested by the user c1r.Load("c:\Reports\MyReports.xml", strReportName); // replace connection string alias string strConn$; switch (i) { c1r.DataSource.ConnectionString; case "$$CUSTOMERS"; case "EMPLOYEES"; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=CSALES"; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\SecureData\Numbers.mdb;" + "Password=slkkdmssids;"; } // set connection string, render report c1r.DataSource.ConnectionString = strConn; ppv1.Document = c1r; } |