簡體   English   中英

在 Visual Studio 中使用 MySQL 並在運行時更改連接

[英]Using MySQL with visual studio and changing the connection at runtime

我在我的應用程序中使用了這樣的東西

MySqlConnection cnn = new MySqlConnection("Server=myServerAddress;" + 
                                          "Database=myDataBase;" + 
                                          "Uid=myUsername;" + 
                                          "Pwd=myPassword;");

這每次都會發生變化,因為我們用我們的應用程序部署了數據庫。 它工作正常。 我輸入using(new connection(cnn)){ query... }然后去。 我已經使用 Windows ODBC 數據源管理員中定義的連接來處理數據集。 但我很好奇,有沒有辦法使用我的本地測試數據庫來使用 Visual Studio 的數據集項目,然后在運行時更改數據集的連接? 更好的是,我可以使用 c# 在運行時以編程方式添加 ODBC 數據源嗎?

通常,連接字符串是從應用程序的同一文件夾中的應用程序 exe.config 文件加載的。 可以使用項目屬性中的“設置”選項卡定義此連接字符串。

  • 右鍵單擊項目的屬性
  • 選擇設置選項卡(如果沒有設置請確認創建)
  • 單擊列類型中的組合框並選擇連接字符串
  • 為您的連接指定一個符號名稱
  • 在值列中鍵入連接字符串(在connectionstrings.com 上的示例)

現在在您的項目文件中,您應該有文件 app.config(即成為 yourapp.exe.config),其中有一個像這樣的部分

<configuration>
  <connectionStrings>
    <add name="MyAppConnection"
      connectionString="Server=myServerAddress;Database=myDB;Uid=user;Pwd=pass;" />
  </connectionStrings>
</configuration 

此時,您在程序中使用

  string conString = ConfigurationManager
                        .ConnectionStrings["MyAppConnection"]
                        .ConnectionString;

相反,在您想在運行時(從用戶輸入、您自己的配置文件等)構建自己的連接字符串的動態情況下,您可以利用類 MySqlConnectionStringBuilder 的功能

MySqlConnectionStringBuilder msb = new MySqlConnectionStringBuilder();
msb.Server = "localhost";
msb.Port = 3306;
msb.UserID = "root";
msb.Password = "xxx";
msb.Database = "test";
MySqlConnection cnn = new MySqlConnection(msb.ConnectionString);
cnn.Open();

當然,這些文字值可以由您自己的變量替換。 這個類的文檔令人驚訝地難以找到。 最好的文檔是Sql Server中的一個。 有趣的是,您可以從配置文件中讀取靜態連接字符串,然后僅更改所需的屬性。

string conString = ConfigurationManager
                  .ConnectionStrings["MyAppConnection"]
                  .ConnectionString;
MySqlConnectionStringBuilder msb = new MySqlConnectionStringBuilder(conString);
msb.Database = "AnotherDB";
MySqlConnection cnn = new MySqlConnection(msb.ConnectionString);

無法在運行時更改應用程序連接字符串。 可以更改用戶設置。

假設您正在使用名為“MyConnectionString”的應用程序設置屬性,它保存整個應用程序的連接字符串。 在您的主 Program 類上創建一個全局字符串:

internal static string Prconnstring;

創建並保存此settings.cs文件:

namespace MYSOLUTIONORPROJECTNAME.Properties
{
    // (Not sure where I found this solution some time ago)
    // This class allows you to handle specific events on the settings class:
    //  The SettingChanging event is raised before a setting's value is changed.
    //  The PropertyChanged event is raised after a setting's value is changed.
    //  The SettingsLoaded event is raised after the setting values are loaded.
    //  The SettingsSaving event is raised before the setting values are saved.
    internal sealed partial class Settings
    {

        public Settings()
        {
            // // To add event handlers for saving and changing settings, uncomment the lines below:
            //
            // this.SettingChanging += this.SettingChangingEventHandler;
            //
            // this.SettingsSaving += this.SettingsSavingEventHandler;
            //
        }

        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e)
        {
            // Add code to handle the SettingChangingEvent event here.
        }

        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e)
        {
            // Add code to handle the SettingsSaving event here.
        }

        public override object this[string propertyName]
        {
            get
            {
                if (propertyName == "MyConnectionString")
                {
                    return Program.Prconnstring;
                }
                else
                {
                    return base[propertyName];
                }
            }
            set
            {
                base[propertyName] = value;
            }
        }
    }
}

在調用打開任何使用連接字符串的對象(示例包括使用數據集的表單或使用在開發環境中創建的數據集的其他類)之前,請通過您認為的任何方式創建新的連接字符串。 示例:您可能希望將當前用戶用作連接字符串中的用戶名。使用從環境中提供的信息創建連接字符串。

Program.Prconnstring = 新的運行時連接字符串。

現在,每當應用程序嘗試獲取MyConnectionString (在myapplicationname.config硬編碼且無法更改)時,而是獲取您提供給Program.Prconnstring的新的新運行時連接thenewruntimeconnectionstring

請注意,開發連接字符串將對最終用戶可見,因為它只是一個文本文件。 如果您不想這樣做,您可以在部署期間更改該文件(將是一個名為 NAMEOFMYAPPLICATION.exe.config 的文件),因為硬編碼在那里的連接字符串對正在運行的應用程序沒有用處。 不要刪除它,只是改變它。

您的連接字符串將存儲在您的 App.config(或 C# 等效項)中。 說它叫做MyConnectionString 只需將My.Settings("MyConnectionString")="[your new connection string]"到您的入口點即可在運行時更改為數據庫綁定。 例如:

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    My.Settings("MyConnectionString") = "server=remotedb.uk;user id=MainUser;password=2jdi38edhnche73g;database=mainDb;persistsecurityinfo=True;allowuservariables=True;defaultcommandtimeout=480;characterset=utf8mb4"

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM