صورت مسئله:
تغییر دیتابیس Connection در زمان اجرا بدون ایجاد مجدد Connection:
اصول کار:
استفاده از متد ChangeDatabase شی Connection به منظور تغییر دیتابیس Connection.
توضیحات مثال:
در مثال زیر، Connection ای به دیتابیس myCurrentDB که در SQL Server وجود دارد، ایجاد می شود.
سپس، Connection به منظور استفاده از دیتابیس myChangedDB تنظیم خواهد شد.
همچنین از خاصیت Database شی SqlConnection جهت نمایش نام دیتابیس Connection استفاده شده است.
کد:
using System;
using System.Configuration;
using System.Text;
using System.Data;
using System.Data.SqlClient;
// . . .
StringBuilder result = new StringBuilder( );
// Create the connection accessing myCurrentDB database.
SqlConnection conn = new SqlConnection(
ConfigurationSettings.AppSettings["Sql_ConnectString"]);
result.Append("Connection String:" + Environment.NewLine);
result.Append(conn.ConnectionString + Environment.NewLine + Environment.NewLine);
conn.Open( );
result.Append("Connection.State: " + conn.State + Environment.NewLine);
result.Append("Database: " + conn.Database + Environment.NewLine);
// Change the database to myChangedDB.
conn.ChangeDatabase("pubs");
result.Append("Database: " + conn.Database + Environment.NewLine);
conn.Close( );
result.Append("Connection.State: " + conn.State + Environment.NewLine);
result.Append("Database: " + conn.Database);
resultTextBox.Text = result.ToString( );
توضیحات:
متد ChangeDatabase که در اینترفیس IDbConnection تعریف شده، نمایانگر یک اتصال یا Connection به منبع داده است. پرووایدرهای SQL Server، OLE DB و Oracle از این اینترفیس جهت برقراری ارتباط با منبع داده استفاده می کنند.
متد ChangeDatabase تنها یک آرگومان دارد و آن هم نام دیتابیسی است که باید با دیتابیس فعلی جایگزین شود.
نکته مهم 1: اگردر هنگام فراخوانی این متد، Connection، باز یا اصطلاحا Open نشده و ارتباط با منبع داده برقرار نباشد، به بروز یک خطا از نوع InvalidOperationException منجر خواهد شد.
نکته مهم 2: در صورتی که به هر دلیلی، عمل تعویض دیتابیس با موفقیت انجام نپذیرد، یک خطا بسته به نوع پرووایدر اتفاق خواهد افتاد.
نکته مهم 3: پس از فراخوانی متد ChangeDatabase و سپس بستن Connection با استفاده از متد Close، نام دیتابیس کانکشن استرینگ، به مقدار پیش فرض آن یعنی قبل از فراخوانی متد ChangeDatabase بر خواهد گشت.