我目前正在使用VB.net获取Crystal Reports需要的报告,我对SQL数据库服务器的访问是使用Windows身份验证,我需要做的是能够更改数据库的IP地址来源,因为我现在正在访问测试服务器,代码将转到其他地方工作。
我发现了什么: 这是更改数据库源的唯一方法 CrReport.SetDatabaseLogon(“用户”,“密码”,“服务器”,“RJCards”) 但我再次使用Windows身份验证。
P.S:当我在报告中更改数据源时,它自身工作得很好,但是由于我们将应用程序移动到另一个地方,因此需要手动设置它,以便从变量或其他内容中重新启动。
这是查看我的代码
Private Sub GetDuplicatedFF()
Dim CrReport As New DuplicatedFF
Dim CrExportOptions As ExportOptions
CrExportOptions = CrReport.ExportOptions
Try
CrReport.SetDatabaseLogon("user", "password", "server", "RJCards")
CrReport.ExportToDisk(ExportFormatType.Excel, My.Settings.defaultDir & "\DuplicatedFF_" & Format(Now.Date, "yyyyMMdd") & ".xls")
'My.Settings.defaultDir & "\DuplicatedFF_" & Format(Now.Date, "yyyyMMdd") & ".xls"
MsgBox("Done Exporting your file")
Catch err As Exception
MessageBox.Show(err.Message)
End Try
End Sub
答案 0 :(得分:1)
使用Windows身份验证或凭据通过Crystal Reports访问数据库时,这意味着数据检索SQL语句将包含在rpt文件中。在您需要更改IP地址,数据库名称等的情况下,这并没有给您太多的灵活性。
使用DataSet作为源,有一种不同的方法为报表提供数据。您只需将必要的DataTables与必要的列一起添加到DataSet中,填充数据并将其提供给报表。所以rpt文件不会包含任何内容 嵌入信息(如SQL语句)。
要将现有报告文件转换为使用上述方法,您可以使用以下步骤:
现在,报告文件将只包含必要的占位符(列),而不包含任何数据库连接或SQL语句。要将数据加载到报告中,请使用下面的代码(根据您的需要进行更改)。
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Windows Authentication Connection String'
Dim ConnString As String = "Server=MyServer;Database=MyDb;Trusted_Connection=Yes;"
'The SQL statement to retrieve data'
Dim SqlStatement As String =
<SQL>
SELECT
[column1]
,[column2]
,[column3]
FROM [MyDb].[dbo].[MyTable]
</SQL>
'A new instance to the DataSet that we created'
Dim MyDataSet As New DataSet2
'A new instance to the report file'
Dim MyReport As New CrystalReport1
'A new instance to the SQL adapter'
Dim SqlAdapter As New SqlDataAdapter(SqlStatement, ConnString)
'Fills the DataTable with data retrieved from the database'
SqlAdapter.Fill(MyDataSet.Tables("TestTable1"))
'Sets the DataSet as the report source'
MyReport.SetDataSource(MyDataSet)
'Previews the report'
CrystalReportViewer1.ReportSource = MyReport
End Sub
End Class