ایجاد بانک اطلاعاتی SQL Server با کدنویسی برنامه هم امکان‌پذیر است. وقتی چنین امکاناتی را پیش‌بینی کنیم، پروژه اجرا شده اطمینان‌بخشی بیشتری خواهد داشت.

ایجاد بانک اطلاعاتی SQL Server با کدنویسی

در این نوشتار ما توضیح می‌دهیم که چگونه می‌توان با استفاده از اشیای SMO (MS SQL Management Objects) بانک اطلاعاتی MS SQL را از طریق کد C# ایجاد نمود. در این مثال ما کار‌های زیر را انجام می‌دهیم:

  1. شناسایی تمام سرور‌های MS SQL موجود در شبکه و درج نام آن‌ها در یک لیست که کاربر آن را انتخاب کند
  2. کاربر نام بانک اطلاعاتی را برای ایجاد آن وارد می‌کند.
  3. کاربر نام یک اشتراک کاربری اکتیو دایرکتوری را برای دادن مجوز دسترسی بانک اطلاعاتی به آن انتخاب می‌کند.
  4. زمانی که کاربر دکمه «ایجاد بانک اطلاعاتی» را کلیک می‌کند برنامه بررسی می‌کند که آیا بانک اطلاعاتی به این نام از قبل موجود هست یا نه.

پیش زمینه
SMO ها (اشیای مدیریتی SQL Server) برای مدیریت سرور MS SQL از طریق کد نویسی در نظر گرفته شده اند. با این که برنامه ی SQL Server Management Studio نیز یک ابزار پر قدرت برای مدیریت SQL Server است، لیکن در جاهایی بهتر است که از برنامه SMO استفاده کنید.
شناسایی و شمارش سرور های SQL
تابع SmoApplication.EnumAvailableSqlServers() فهرست نمونه های (Instance) در دسترس MS SQL Server را شناسایی می کند و یک شیء از نوع DataTable را – که حاوی اطلاعات مربوط به نمونه های SQL Server است- بر می گرداند.

در زیر ستون های جدول مذکور را توضیح می دهیم.

نام ستون (Column name) نوع داده (Data type) شرح
Name String نام نمونه SQL Server
Server String نام سروری (کامپیوتر) که نمونه SQL Server در آن نصب شده است.
Instance String نمونه SQL Server
IsClustered Boolean اگر نمونه ی مورد نظر به صورت چند بخشی باشد مقدار آن true و در غیر این صورت false است.
Version String نگارش  نمونه SQL Server
IsLocal Boolean در صورتی که نمونه ی مورد نظر محلی باشد مقدار آن true و در غیر این صورت false است.
DataTable dt = SmoApplication.EnumAvailableSqlServers();
foreach (DataRow dr in dt.Rows)
{ 
this.cbServers.Items.Add(dr[0]);
}

اتصال به SQL Server

ابتدا بررسی می کنیم که سرور انتخاب شده محلی (local) است یا شبکه ای

//Connect to the local, default instance of SQL Server.
string srvname = this.cbServers.SelectedItem as string;
Server srv;
if (srvname == null)
{
    srv = new Server();
    sb.AppendLine("Connected to local SQL server");
}
else 
{
    srv = new Server(srvname);
    sb.AppendLine(string.Format("Connected to {0}", srvname));
}

بررسی موجود بودن بانک اطلاعاتی

بررسی این موضوع ساده است. کافی است مشخصه بانک اطلاعاتی (Databases attribute) را در سرور مورد نظر استفاده کنیم.

//Define a Database object variable by supplying the server and the 
//database name arguments in the constructor. 
Database db = srv.Databases[this.tbDBName.Text.Trim()];
if (db != null)
{
    if (MessageBox.Show(string.Format
	("The '{0}' already exists do you want to drop it?", this.tbDBName.Text), 
	"Warning", MessageBoxButtons.YesNo, 
	MessageBoxIcon.Question) == DialogResult.Yes)else 
    {
        if (MessageBox.Show(string.Format
	("Create the Tables and Stored Procedures for BT Error Manager on '{0}'?", 
	this.tbDBName.Text), "Warning", MessageBoxButtons.YesNo, 
	MessageBoxIcon.Question) == DialogResult.Yes)
        {
            b.AppendLine("Creating the Tables and Stored Procedures.");
            this.tbProgress.Text = sb.ToString();
            db.ExecuteNonQuery(dbstring);
            sb.AppendLine(string.Format
	   ("Created the Tables and Stored Procedures for BT Error Manager on '{0}'", 
	   this.tbDBName.Text));this.tbProgress.Text = sb.ToString();
	   this.tbProgress.ScrollToCaret();"Proceed or select another database");
	   this.tbProgress.Text = sb.ToString();this.tbProgress.ScrollToCaret();
            return; 
}

ایجاد بانک اطلاعاتی

بدین منظور باید یک شیء جدید از نوع Database را با دادن نام آن و نام سرور و فراخوانی متد Create ایجاد نمایید

db = new Database(srv, this.tbDBName.Text);
this.tbProgress.Text = sb.ToString();
this.tbProgress.ScrollToCaret();
//Create the database on the instance of SQL Server. 
db.Create();
sb.AppendLine("Created the database.");
sb.AppendLine("Creating the Tables and Stored Procedures.");
this.tbProgress.Text = sb.ToString();this.tbProgress.ScrollToCaret(); 

اجرای اسکریپت SQL

در مرحله ی پایانی جداول، نما ها و روال های ذخیره شده را ایجاد می نماییم.

//'Reference the database and display the date when it was created. 
db.ExecuteNonQuery(dbstring);

توجه

برای استفاده از این کد شما باید مرجع (reference) های مورد نیاز را در فایل های اسمبلی SMO اضافه کنید. شما می توانید فایل های اسمبلی SMO را در پوشه واقع در مسیر C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies پیدا کنید. فایل های زیر را انتخاب نمایید:

  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SqlEnum.dll
  • Microsoft.SqlServer.SmoEnum.dll
  • مؤلف: Moustafar
  • منبع: http://www.codeproject.com

پایان