在vb.net中更改Crystal Reports db ip address

时间:2017-07-31 07:49:21

标签: sql-server vb.net crystal-reports

我目前正在使用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

1 个答案:

答案 0 :(得分:1)

使用Windows身份验证或凭据通过Crystal Reports访问数据库时,这意味着数据检索SQL语句将包含在rpt文件中。在您需要更改IP地址,数据库名称等的情况下,这并没有给您太多的灵活性。

使用DataSet作为源,有一种不同的方法为报表提供数据。您只需将必要的DataTables与必要的列一起添加到DataSet中,填充数据并将其提供给报表。所以rpt文件不会包含任何内容 嵌入信息(如SQL语句)。

要将现有报告文件转换为使用上述方法,您可以使用以下步骤:

  1. 在您的应用程序中创建一个xsd文件(添加新项目...→数据→数据集)
  2. 编辑DataSet并添加必要的DataTable(右键单击→添加→DataTable)
  3. 编辑DataTable并添加必要的列(右键单击DataTable→添加→列)
  4. 编辑每个列并设置其属性,例如DataType等(左键单击列→更改属性窗口内的属性)
  5. 现在您需要编辑报告文件并更改数据源位置(双击报告→左键单击字段资源管理器中的数据库字段→设置数据源位置...)
  6. 作为Datasource替代品,选择ADO.NET(XML)并双击Make New Connection。选择xsd文件(DataSet)的文件路径,然后按“完成”。
  7. 每个DataTable必须与现有数据源内的现有数据源配对:"选择该对并按“更新”按钮。
  8. 现在,报告文件将只包含必要的占位符(列),而不包含任何数据库连接或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