2017-07-31 72 views
0

我目前使用VB.net來獲取Crystal Reports所需的報告,我對SQL數據庫服務器的訪問使用的是Windows身份驗證,我需要做的是能夠更改數據庫源的IP地址,因爲我現在正在訪問測試服務器,並且代碼將會去其他地方工作。在vb.net中更改Crystal Reports數據庫的IP地址

我學到了什麼: 這是改變數據庫源 CrReport.SetDatabaseLogon(「用戶」,「密碼」,「服務器」,「RJCards」) 但話又說回來我使用Windows的唯一途徑認證。 P:當我改變報表上的數據源時,它自身的工作很好,但是由於我們將應用程序移動到另一個地方,它需要手動設置,就像從變量或其他東西中取回一樣。

這裏一看就是在我的代碼

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

當您使用Windows身份驗證或憑據訪問在Crystal Reports的數據庫,這意味着數據檢索SQL語句將被包含在RPT文件中。在您需要更改IP地址,數據庫名稱等情況下,這不會給您太多的靈活性。

有一種不同的方法可以使用DataSet作爲源向報告提供數據。您只需將必要的數據列添加到DataSet中,然後填入數據並將其提供給報告。因此,rpt文件將不包含嵌入信息(如SQL語句)的任何 。

爲了將現有的報告文件使用上述方法,您可以使用以下步驟:

  1. 創建應用程序中的XSD文件(添加新項...→數據→數據集)
  2. 編輯數據集,並添加必要的DataTable(S)(點擊右鍵→添加→數據表)
  3. 編輯數據表(S)和添加必要的列(S)(右鍵單擊數據表→添加→列)
  4. 編輯每列並設置其屬性,如DataType等(左鍵單擊列→更改屬性窗口內的屬性)
  5. 現在您需要編輯報告文件並更改數據源位置(雙擊報告→左鍵單擊字段資源管理器中的數據庫字段→設置數據源位置...)
  6. 作爲數據源替換選擇ADO.NET(XML)並雙擊新建連接。選擇xsd文件的文件路徑(DataSet)並按完成。
  7. 每個DataTable必須與「當前數據源:」內的現有表配對,方法是選擇該對並按下更新按鈕。

現在報表文件將只有必要的佔位符(列),沒有任何數據庫連接或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 
+0

我真的很熟悉這樣一個明確的答案,將整個代碼固定爲指導,並按預期工作。非常感謝:) –

+0

不客氣 –