PDA

View Full Version : سوال: نصب دیتابیس همراه با Setup برنامه



13601360
شنبه 27 تیر 1388, 13:38 عصر
سلام دوستان عزیز
یه سوال از خدمت تون داشتم
چطور می تونم دیتابیس پروژه خودم رو همراه با نصب برنامه در سیستم مقصد در بانک Attach کنم
ممنون از لطفتون

Alt+F4
شنبه 27 تیر 1388, 14:18 عصر
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.\\sqlexpress; Initial Catalog=master;Integrated Security=True";
con.Open();

string str = "use master;" +
"EXECUTE sp_attach_db @dbname = N'SaynaDB' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\SaynaDB.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + " \\SaynaDB_log.ldf'" ;

SqlCommand cmd = new SqlCommand(str,con);
cmd.ExecuteNonQuery();
con.Close();

;(" شد Attach دیتابیس با موفقیت") MssageBox.Show
{

catch (Exception x)
{
if(x.Message.IndexOf("already exists")>=0)
;(" دیتابیس موجود است").MssageBox.Show
else
MessageBox.Show(x.Message);

}

فقط با این روش یه مشکلی هست .اینکه وقتی برنامه رو نصب و سپس uninstall میکنید و میخواهید که دوبا ره نصب کنید باید sqlserver express رو هم uninstall و دوباره نصب کنید. وگرنه DataBase رو نمی شناسه.من که از این سر در نیاوردم.
این موضوع واسه من که یه مشکل عدیده شده.
اگه کسی میدونه چشه، بگه!!!

Mohsen229266
شنبه 27 تیر 1388, 15:21 عصر
سلام دوستان بهترین راه به نظر من اینه که در ابتدای برنامه یک دیتابیس خالی در برنامه ایجاد کنید و فایل بک آپ دیتابیسو روش ریستور کنید در پایان برنامه دوباره بک آپ بگیرید و دیتابیسو پاک کنید میتونید فایل بک آپ رو فشرده هم بکنید و...

hozouri
شنبه 27 تیر 1388, 15:53 عصر
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.\\sqlexpress; Initial Catalog=master;Integrated Security=True";
con.Open();

string str = "use master;" +
"EXECUTE sp_attach_db @dbname = N'SaynaDB' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\SaynaDB.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + " \\SaynaDB_log.ldf'" ;

SqlCommand cmd = new SqlCommand(str,con);
cmd.ExecuteNonQuery();
con.Close();

;(" شد Attach دیتابیس با موفقیت") MssageBox.Show
{

catch (Exception x)
{
if(x.Message.IndexOf("already exists")>=0)
;(" دیتابیس موجود است").MssageBox.Show
else
MessageBox.Show(x.Message);

}

فقط با این روش یه مشکلی هست .اینکه وقتی برنامه رو نصب و سپس uninstall میکنید و میخواهید که دوبا ره نصب کنید باید sqlserver express رو هم uninstall و دوباره نصب کنید. وگرنه DataBase رو نمی شناسه.من که از این سر در نیاوردم.
این موضوع واسه من که یه مشکل عدیده شده.
اگه کسی میدونه چشه، بگه!!!


دوست عزیز وقتی که بانکی رو Attach می کنی و بخوای بانکی رو به همان نام دوباره Attach کنی پیغام خطا میده مشکل عدیده شما اینجاست.

mahdi87_gh
یک شنبه 28 تیر 1388, 00:04 صبح
یک راه دیگه ای که به نظرم میرسه اینه که شما دو کلاس Installer ایجاد کنید.یکی واسه attachو اون یکی Detach کردن بانکتون. حالا موقعی که دارید setup برنامه رو ایجاد می کتید در قسمت custom Actions فایل
attach رو در Install و Deatch رو در Unistall قرار بدید

kiarayan
یک شنبه 28 تیر 1388, 01:02 صبح
به نظر من هم این امکان پذیره

Alt+F4
یک شنبه 28 تیر 1388, 01:36 صبح
من این قطعه کد رو از آقای Hozouri عزیز گرفتم. ولی نمیدونم که کد قسمت Detach باید چه شکلی باشه؟ مثل کد Attach و یا ...؟

آقا مهدی میشه بگین تو خود Visual Studio چطوری Uninstall میشه ساخت؟
اصلأ Visual Studio همچین امکانی رو میده؟

(من برنامه ی install رو از قسمت setup and Deployment / setup Wizard ساختم )

asd_moghadas
یک شنبه 28 تیر 1388, 07:02 صبح
سلام
راه دیگری که من استفاده میکنم اینه که کد attach را درلود فرم پدر قراردادم وموقع اجرا ی برنامه دیتابیس attach میشه ومشکله کدهای وق اینه که در sqlserver express دیتابیس را جابه جا یا move میکنه به خاطر همین موضوع مجبوربه نسب مجدد sqlserver express هستیم

mahdi87_gh
یک شنبه 28 تیر 1388, 10:56 صبح
آقا مهدی میشه بگین تو خود Visual Studio چطوری Uninstall میشه ساخت؟
اصلأ Visual Studio همچین امکانی رو میده؟بله شما می تونید این کار رو با خود ویژوال استودیو انجام بدید. برای این کار باید شما روی آیکن های بالای Solution Explorer کلیک کنید و به قسمت custom Actions برید و فایلهای dll مربوط به Installer رو در قسمتهایی که گفتم قرار بدید.

من این قطعه کد رو از آقای Hozouri عزیز گرفتم. ولی نمیدونم که کد قسمت Detach باید چه شکلی باشه؟ مثل کد Attach و یا ...؟
من توی پست زیر یه برنامه گذاشتم که هم attach میکنه و هم Detach
http://barnamenevis.org/forum/showthread.php?t=168369

برای ساخت یه dll اینستالر اول یه پروژه Class Libarary ایجاد کن. کلاس پیشفرض رو پاک کن و Add new item رو بزن و Installer Class رو انتخاب کن. برات یه نمونه میزارم

13601360
یک شنبه 28 تیر 1388, 11:32 صبح
ممنون جناب mahdi87_gh
توی سیستم باید SQL Managment نصب باشه؟؟

Soroush.Sarabi
یک شنبه 28 تیر 1388, 11:54 صبح
نه دوست عزیز نیازی به SSMS نیست.

(http://soroush-sarabi.blogspot.com)

mahdi87_gh
یک شنبه 28 تیر 1388, 13:25 عصر
همونطور که دوست عزیز آفای سارابی گفتن نیازی نیستش