PDA

View Full Version : فراخوانی sp برای attach دیتابیس در setup برنامه



fereshte22
دوشنبه 14 آبان 1386, 19:09 عصر
سلام
من یه Setup برای برنامه خود درست کردهام و حالا میخواهم که دیتابیس را به sqlserver اتچ کنم.برای این کار از sp زیر:


EXEC sp_attach_db @dbname = N'dd',
@filename1 = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\dd.mdf',
@filename2 = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\dd_log.ldf'

و اون را به صورت زیر فراخوانی کردم.



Cnn = New SqlConnection("Data Source=FERESHTE-BDE62C\SQLEXPRESS;Initial Catalog=master;Integrated Security=True")
Cmd = New SqlCommand("sp_attach_db", Cnn)
Cmd.CommandType = CommandType.StoredProcedure
Dim param As Parameter
Cmd.Parameters.Add("@dbname", "dd")
Cmd.Parameters.Add("@filename1", "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\dd.mdf")
Cmd.Parameters.Add("@filename2", "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\dd_log.ldf")
Cnn.Open()
Cmd.ExecuteNonQuery()
Cnn.Close()

حالا مسئله اینه که چطوری مشخص کنیم این رویداد فقط یک یکبار فراخوانی شود و وقتی دیتابیس attach شد دیگه فراخوانی نشود.؟

shahab_ksh
دوشنبه 14 آبان 1386, 19:12 عصر
یه نشون تو دیتابس بزار مثلا وجود یه تیبل رو تست کن اگه در دیتابیس وجود داشت اگه این بهش از کد اجرا نشه به نظرم با SP بنویسی خیلی راحتر و سریع تره

hamed_bostan
دوشنبه 14 آبان 1386, 21:17 عصر
به دو روش میتونی . اول اینکه هر بار این متد رو فراخونی میکنی بدون اونکه چک کنی attach شده یا نه . اگه attach نشده که میشه و اگه شده یه exception ایجاد میکنه که با try ردش کن

روش دوم اینکه قبل از اجرای این روال یه کانکشن به دیتابیست باز کن . اکه به سلامت باز و بسته شد که نیاز نیست اجرا شه واگر نه کد attach رو توی قسمت catch مربوط به try بذار

موفق باشی

fereshte22
سه شنبه 15 آبان 1386, 12:04 عصر
مرسی از راهنمایی دوستان عزیز
مشکلی که برام باقی مونده اینه که وقتی Setup را روی سیستم دیگری نصب و اجرا میکنیم
خوب مشخصات connectionstring فرق میکنه و همچنین user و..
برای حل این مشکل باید چیکار کنیم؟چطوری به صورت داینامیک این مشخصات را تغییر بدهیم؟

hamed_bostan
سه شنبه 15 آبان 1386, 12:13 عصر
شما وقتی sql server روی سیستمت نصب باشه دیتا بیس master رو داری در هر حالت و user مربوط به sa هم واسه ات موجوده پس میتونی به اون وصل شی و دستورات مربوط به attach و .. رو اجرا کنی . اگر هم داری از desktop engine استفاده میکنی که namespace و همه چی دست خودته و تنظیمات رو خودت انجام می دی پس مشکلی نیست .

fereshte22
سه شنبه 15 آبان 1386, 12:45 عصر
توی connectionstring خاصیت data source بر روی سیستم دیگر عوض میشود.در ضمن برای attach به دیتابیس master وصل میشویم برای برای کارهای دیگر که باید به دیتابیس خودمون وصل شویم.

hamed_bostan
سه شنبه 15 آبان 1386, 12:59 عصر
fereshte22 (http://barnamenevis.org/forum/member.php?u=32824) جان من متوجه نشدم پست اخر شما خبری بود یا پرسشی؟

fereshte22
سه شنبه 15 آبان 1386, 14:38 عصر
خبری بود.
البته اگر من اشتباه میکنم شما من را راهنمایی کنید

Behrouz_Rad
سه شنبه 15 آبان 1386, 18:23 عصر
سعی کن تا حد ممکن سربار وقوع خطا رو به برنامت تحمیل نکنی.
روش های پیشنهادی دوستان توضیح فوق رو نقض می کنه.
از دیتابیس master و جدول sysdatabases کمک بگیر.
اولین خط اسکریپت تو به شکل ذیل میشه:


IF Not EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'myDB')
//Begin Attach Database


در مورد قسمت دوم سوالت:
ابتدا برابر با localhost قرار بده و در صورتی که موفق به برقراری ارتباط نشدی از SQL-DMO استفاده کن.
Microsoft SQLDMO Object Library رو به پروژت اضافه کن و به شکل ذیل نام سرورهای نصب شده رو به دست بیار و چک کن:


Dim oNames As SQLDMO.NameList
Dim oSQLApp As New SQLDMO.Application
oNames = oSQLApp.ListAvailableSQLServers()
For i As Int32 = 1 To oNames.Count
Response.Write(oNames.Item(i))
Next

موفق باشید.

پ.ن: من فرض رو بر تست پروژه در حالت لوکال بر روی سیستم های مختلف در نظر گرفتم. مطمئنا میدونی که نام سرور رو قبل از آپلود بر روی هاست باید از ادمین بپرسی.

m.hamidreza
سه شنبه 15 آبان 1386, 21:51 عصر
عجب مدیری داریم ما ! :تشویق:
مهندس بهروز ،چه جوری میشه که یه برنامه نویس اینجوری میشه ! آخه سنی هم نداشتی! :چشمک:
هزار ماشاالله .... تو همه ی زمینه ها تپلی ! بی ربطه به تاپیک ولی دلم نیومد اینارو نگم ....
یه اسفندی چیزی دود کن مهندس ، خدا حفظت کنه .:قلب:

fereshte22
سه شنبه 15 آبان 1386, 23:21 عصر
اقای راد عزیز عذر میخواهم ولی نمیدونم چرا وقتی کدهایی که برای به دست اوردن سرورهای نصب شده است را اجرا میکنم هیچ چیزی بر نمیگرداند.

Behrouz_Rad
چهارشنبه 16 آبان 1386, 07:18 صبح
عجب مدیری داریم ما ! :تشویق:
مهندس بهروز ،چه جوری میشه که یه برنامه نویس اینجوری میشه ! آخه سنی هم نداشتی! :چشمک:
هزار ماشاالله .... تو همه ی زمینه ها تپلی ! بی ربطه به تاپیک ولی دلم نیومد اینارو نگم ....
یه اسفندی چیزی دود کن مهندس ، خدا حفظت کنه .:قلب:
سر قرار عمومی نبودی که ببینی هیچکس باورش نمیشد که من منم!
نمیدونم چرا همه از من چهره ای خشن در ذهنشون ساختن :D

اقای راد عزیز عذر میخواهم ولی نمیدونم چرا وقتی کدهایی که برای به دست اوردن سرورهای نصب شده است را اجرا میکنم هیچ چیزی بر نمیگرداند.
وقتی چیزی بر نمیگردونه یعنی تنها یک Server نصب کردی. یعنی همون localhost یا همون SQLEXPRESS\.
برای اینکه نتیجه ی بهتری بگیری یک سرور جدید معرفی کن و اون تکه کد رو اجرا کن.

موفق باشید.

fereshte22
چهارشنبه 16 آبان 1386, 11:39 صبح
اقای راد من خیلی در administrative tools دنبال گزینه ای برای اضافه کردن سرور جدید گشتم ولی چیزی پیدا نکردم .میشه بگید چطوری باید یه سرور جدید ایجاد کنم؟

m.hamidreza
چهارشنبه 16 آبان 1386, 13:04 عصر
سر قرار عمومی نبودی که ببینی هیچکس باورش نمیشد که من منم!
نمیدونم چرا همه از من چهره ای خشن در ذهنشون ساختن :D

بودم مهندس جون ! کلوچه ، عکس ، .... منتها تو سالن 8 که رفتیم مجذوب یه چیزی شدم گم شدم ! :قهقهه: هرچی هم گشتم دیگه بچه هارو پیدا نکردم ... آره منم ساخته بودم اتفاقا ! اون موقع بود که تازه فهمیدم چه مدیر نازی داریم ما .... :لبخند:


اقای راد من خیلی در administrative tools دنبال گزینه ای برای اضافه کردن سرور جدید گشتم ولی چیزی پیدا نکردم .میشه بگید چطوری باید یه سرور جدید ایجاد کنم؟

سرور جدید رو مگه از تو خود Enterprise Manager اضافه نمیکنن ؟ :افسرده:

Behrouz_Rad
چهارشنبه 16 آبان 1386, 19:38 عصر
اقای راد من خیلی در administrative tools دنبال گزینه ای برای اضافه کردن سرور جدید گشتم ولی چیزی پیدا نکردم .میشه بگید چطوری باید یه سرور جدید ایجاد کنم؟

خواهر من، در SQL Server باید یک سرور رو رجیستر کنید...

حالا زیاد مهم نیست... شما برابر با localhost یا SQLEXPRESS\. قرار بده ببین چی میشه.

موفق باشید.

fereshte22
پنج شنبه 17 آبان 1386, 20:20 عصر
آقای راد من میخواستم که دیگه مزاحم نشوم ولی مثل اینکه نمیشود.
ببینید در SQL Server Configuration Manager (sql2005
دو تا سرور شامل sqlserver/sqlexperess و sql server browser وجود داشت که من نام این Sqlexpress را که نتونستم تغییر دهم و گزینه هم برای ایجاد سرور جدید پیدا نکردم.

Behrouz_Rad
جمعه 18 آبان 1386, 19:39 عصر
تلاش کن میتونی... بگرد پیدا میکنی :)

sana.2557
پنج شنبه 02 اردیبهشت 1389, 16:03 عصر
سلام میخواستم بدونم بعد از گذشتن چند سال فهمیدی چه کار کنی تا بتونی یه سرور به نامsql expres/. بسازی ممنون میشم به من هم بگی چون همین مشکل را دارم