PDA

View Full Version : سوال: attach کردن پایگاه داده با کد نویسی



AliSaeedi_v
چهارشنبه 23 آذر 1390, 23:43 عصر
سلام
چطوری میشه با کد نویسی یک فایل پایگاه داده sql2008رو با کد نویسی به اس کیوال 2008،attachکرد؟؟
دوستان اگه کسی میدونه لطفا کمک کنه.:متفکر:ممنون

hamed_gibago
پنج شنبه 24 آذر 1390, 20:42 عصر
براي اين كار 3 روش وجود داره:
1- استفاده از عبارت CREATE DATABASE
2- استفاده از sys.sp_attach_db
3- استفاده از sys.sp_attach_single_file_db

روش اول كه تمپليتش اينه:
CREATE DATABASE database_name
ON <filespec> [ ,...n ]
FOR ATTACH [;]

نمونه كد زير هم براي اين روش هستش:
SqlConnection conn = new SqlConnection("Server=(local);
Data Source=;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("", conn);

cmd.CommandText =
"CREATE DATABASE 'MyDatabase' ON " +
"PRIMARY ( FILENAME = 'database.mdf' ) " +
"FOR ATTACH";

conn.Open();

cmd.ExecuteNonQuery();

cmd.Dispose();
conn.Dispose();

روش دوم هم به اين صورته:
cmd.CommandText = "exec sys.sp_attach_db MyDatabase, 'database.mdf'";

در اين روش اگه فايل لوگ را وارد نكنيد خود sql يكي براتون درست مي كنه

در روش سوم هم فقط فايل ديتابيس رو لازم وارد كنيد و لوگ لازم نيست:
cmd.CommandText = "exec sys.sp_attach_single_file_db MyDatabase, 'database.mdf'";

منبع: سايت codeproject,cion

AliSaeedi_v
جمعه 25 آذر 1390, 00:14 صبح
از همگی ممنون ولی یکم دیر جواب دادین
کد رو به صورت تابع میزارم

public void attach()
{
 

string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
string cm = @"EXEC sp_attach_db @dbname = 'EDB',@filename1='F:\ali\Ehsan\Espadana\Espadana\E DB.mdf',@filename2='F:\ali\Ehsan\Espadana\Espadana \EDB_log.ldf'";
SqlConnection con = new SqlConnection(cs);
con.Open();
SqlCommand cmd = new SqlCommand(cm,con);
cmd.ExecuteReader();
con.Close();


}

Esmail Solhkhah
جمعه 25 آذر 1390, 00:36 صبح
به پیشنهاد مایکروسافت از ورژن 2005 به بالا از CREATE DATABASE database_name FOR ATTACH

استفاده کنید.



This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. We recommend that you use CREATE DATABASE database_name FOR ATTACH instead. For more information, see CREATE DATABASE (Transact-SQL) (http://msdn.microsoft.com/en-us/library/ms176061%28v=sql.90%29.aspx).

http://msdn.microsoft.com/en-us/library/ms179877%28v=sql.90%29.aspx

موفق باشید.

negar.rafie
جمعه 25 آذر 1390, 10:48 صبح
ببخشید دوستان این کدها را کجا می نویسیم در هنگام ساخت ستاپ ؟

hamed_gibago
جمعه 25 آذر 1390, 12:56 عصر
دوستان یکی جواب بده ایا این کدها را در هنگامی که داریم ستاپ می سازیم می نوسیم یا در خود نرم افزار که بعد از نصب دیتابیس اتچ کنیم؟

مي توني موقع نصب setup بزاري ولي يه كم درد سر داره
بهتره يه فرم مخفي تو پروژه ات تعريف كني كه راحت از اونجا attach koni

negar.rafie
جمعه 25 آذر 1390, 14:18 عصر
یعنی یه فرم بزارم اول برنامه که هر بار که برنامه اجرا میشه دیتابیس اول اتچ کنه بعد وارد فرم اصلی بشه؟

negar.rafie
جمعه 25 آذر 1390, 16:00 عصر
یعنی یه فرم بزارم اول برنامه که هر بار که برنامه اجرا میشه دیتابیس اول اتچ کنه بعد وارد فرم اصلی بشه؟

دوست عزیز جواب ندادی؟

AliSaeedi_v
جمعه 25 آذر 1390, 20:39 عصر
سلام میتونی توی فرم لود اصلی چک کنی اگه attach نبود اینکارا رو انجام بدی
یا توی برنامه یه دکمه بزاری فقط برای اولین بار که اجرا میشه کاربر اونو کلیک کنه و برا مراتب بعد مخفی بشه!!
موفق باشی

mahmoodof
یک شنبه 07 اسفند 1390, 17:29 عصر
سلام دوستان عزيز !
ميشه اين كدا رو توي رويداد Form_load مربوط به Masterpage تعريف كنم؟؟؟
يا علي...

mahmoodof
دوشنبه 08 اسفند 1390, 16:10 عصر
دوستان كسي اينجا نيست ، جواب بده ؟؟؟؟!!!!!!!
من كدها رو در page_load مربوط به MasterPage به صورت زير ، وارد كردم.ولي پيغام خطاي زير رو ميده !!!


protected void Page_Load(object sender, EventArgs e)
{

conn.ConnectionString = "Server=(local);Data Source=;Integrated Security=SSPI";
SqlCommand cmdd = new SqlCommand();
cmdd.Connection = conn;
cmdd.CommandText = "CREATE DATABASE 'MyDatabase' ON " + "PRIMARY ( FILENAME = '|DataDirectory|Database.mdf' ) " + "FOR ATTACH";
conn.Open();
cmdd.ExecuteNonQuery();
cmdd.Dispose();
conn.Dispose();
}

خطا :

Line 1: Incorrect syntax near 'MyDatabase'.

conn رو هم توي public partial تعريف كردم.
به Data Source نبايد مقدار بديم؟؟؟؟ اگر لازمه كه مقدار بديم ، چي بايد بديم؟؟؟ راستي در رابطه با خط كدها اگر توضيحاتي هم بدين ، ممنون ميشم.
خواهش ميكنم كمك كنيد.
موفق باشيد.يا علي...

shadi khanum
چهارشنبه 10 اسفند 1390, 19:42 عصر
دوست عزیز هر کانکشنی که به دیتابیس میزنی چه از توی برنامه و چه از توی sql management باید به یه دیتابیس یا همون Datasource وصل شی.پس باید توی کانکشن استرینگتون برای دیتاسورس master رو بنویسید
موفق باشی

mahmoodof
پنج شنبه 11 اسفند 1390, 20:09 عصر
دوست عزیز هر کانکشنی که به دیتابیس میزنی چه از توی برنامه و چه از توی sql management باید به یه دیتابیس یا همون Datasource وصل شی.پس باید توی کانکشن استرینگتون برای دیتاسورس master رو بنویسید
موفق باشی
ممنونم از جوابتون
من data source رو برابر با master كردم ولي بازم هيچ تغييري نكرد و همون پيغام خطارو داد.
Line 1: Incorrect syntax near 'MyDatabase'.
ممنون و منتظرم.

mhsmity
دوشنبه 14 بهمن 1392, 06:17 صبح
سلام
تاریخ ایجاد این تاپیک خیلی قدیمه ولی یه سوال داشتم
بعد از این که به این روش دیتابیس خودمون رو اتچ کردیم

چه طور یک کاربر در اسکیول تعریف کنیم ؟