【问题标题】:Change Crystal Reports db ip address in vb.net在 vb.net 中更改 Crystal Reports db ip 地址
【发布时间】:2017-07-31 07:49:20
【问题描述】:

我目前正在使用VB.net通过Crystal Reports获取需要的报表,我对SQL数据库服务器的访问是使用windows身份验证的,我需要做的是能够更改数据库的IP地址源,因为我现在正在访问测试服务器,代码将转到其他地方工作。

我发现了什么: 这是更改数据库源的唯一方法 CrReport.SetDatabaseLogon("user", "password", "server", "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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    1. 在您的应用程序中创建一个 xsd 文件(添加新项... → 数据 → 数据集)
    2. 编辑数据集并添加必要的数据表(右键单击 → 添加 → 数据表)
    3. 编辑数据表并添加必要的列(右键单击数据表→添加→列)
    4. 编辑每一列并设置其属性,如 DataType 等(左键单击列 → 在属性窗口内更改属性)
    5. 现在您需要编辑报表文件并更改数据源位置(双击报表 → 在字段资源管理器中左键单击数据库字段 → 设置数据源位置...)
    6. 作为数据源替代选择 ADO.NET (XML) 并双击 Make New Connection。选择 xsd 文件 (DataSet) 的文件路径,然后按完成。
    7. 每个数据表都必须与“当前数据源:”中的现有表配对,方法是选择配对并按下更新按钮。

    现在报告文件将只包含必要的占位符(列),而无需任何数据库连接或 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
    

    【讨论】:

    • 我真的很喜欢这样一个明确的答案,按照指导修复了整个代码并且它按预期工作。非常感谢:)
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多