存取安全資料庫
Web Form 和 Windows Form 使用 Crystal Reports for Visual Studio .NET 存取安全資料庫的程序並不相同。在 Windows Form 中,會自動出現對話方塊自動提示使用者輸入其使用者名稱和密碼。但在 Web Form 中,您必須設計從使用者處擷取這些資訊的表單。不論是哪一種情況,您都可以使用程式碼指定使用者名稱和密碼,提供相同的安全性層級給您應用程式的所有使用者。
設定資料庫登入參數
下列範例說明如何傳遞登入參數至報表的資料表。在這個範例中,將使用安全的 SQL Server 資料庫連接。
請開始新的專案。
加入 Button 和四個 Textbox 控制項至表單。
將 Textbox 控制項命名為 serverNameTxt、dbNameTxt、userNameTxt 和 passwordTxt。
按兩下 Button 控制項以指定 Click 事件的程式碼。請根據您使用的語言,插入適當的程式碼。
[Visual Basic]
' 宣告必要的變數。 Dim logOnInfo As New TableLogOnInfo() Dim i As Integer ' 在報表的所有資料表中進行迴圈。 For i = 0 To report.Database.Tables.Count - 1 ' 設定目前資料表的連接資訊。 logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text logOnInfo.ConnectionInfo.UserID = userNameTxt.Text logOnInfo.ConnectionInfo.Password = passwordTxt.Text report.Database.Tables.Item(i).ApplyLogOnInfo(logOnInfo) Next i
[C#]
// 宣告必要的變數。 TableLogOnInfo logOnInfo = new TableLogOnInfo (); int i = 0; // 在報表的所有資料表中進行迴圈。 for (i=0;i == Report.Database.Tables.Count - 1;i++) { // 設定目前資料表的連接資訊。 logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text; logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text; logOnInfo.ConnectionInfo.UserID = userNameTxt.Text; logOnInfo.ConnectionInfo.Password = passwordTxt.Text; Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo); }
[C++]
// 宣告必要的變數。 TableLogOnInfo* logOnInfo = new TableLogOnInfo (); int i = 0; // 在報表的所有資料表中進行迴圈。 for (i=0;i == Report->Database->Tables->Count - 1;i++) { // 設定目前資料表的連接資訊。 logOnInfo->ConnectionInfo->ServerName = serverNameTxt->Text; logOnInfo->ConnectionInfo->DatabaseName = dbNameTxt->Text; logOnInfo->ConnectionInfo->UserID = userNameTxt->Text; logOnInfo->ConnectionInfo->Password = passwordTxt->Text; Report->Database->Tables->Item [i]->ApplyLogOnInfo (logOnInfo); }
[VJ#]
// 宣告必要的變數。 TableLogOnInfo logOnInfo = new TableLogOnInfo (); int i = 0; // 在報表的所有資料表中進行迴圈。 for (i=0;i == Report.get_Database().get_Tables().get_Count() - 1;i++) { // 設定目前資料表的連接資訊。 logOnInfo.get_ConnectionInfo().set_ServerName(serverNameTxt.get_Text()); logOnInfo.get_ConnectionInfo().set_DatabaseName(dbNameTxt.get_Text()); logOnInfo.get_ConnectionInfo().set_UserID(userNameTxt.get_Text()); logOnInfo.get_ConnectionInfo().set_Password(passwordTxt.get_Text()); Report.get_Database().get_Tables().get_Item(i).ApplyLogOnInfo (logOnInfo); }
注意 如果是密碼保護的 PC 資料庫,如 Microsoft Access 和 Paradox,請使用相同的方法,但 LogOnInfo.ServerName 和 LogOnInfo.DatabaseName 必須留白。