PDA

View Full Version : سوال: Attach كردن پايگاه داده از طريق برنامه



sadrapro
جمعه 02 بهمن 1388, 16:04 عصر
من ميخواهم از طريق برنامه كدي بنويسم كه پايگاه داده هم رو Attach كنم. استفادش زماني هست كه وقتي من ُSetup برنامه ام رو جاي ديگه نصب كردم. برنامه خودش پايگاه داده رو Attach كنه.

ACorvinus
جمعه 02 بهمن 1388, 17:06 عصر
سلام .



"Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath + "\nomre.mdf" & ";Integrated Security=True;Connect Timeout=30;User Instance=True"

sadrapro
جمعه 02 بهمن 1388, 17:40 عصر
ميشه لطف كنيد بيشتر توضيح بديد. اين كد رو بايد كجا بنويسم؟
يعني من با اين كد ميتونم هرجا كه Setup برنامه رو اجرا كردم و برنامه نصب و run شد خودش پايگاه داده رو Attach ميكنه؟

ACorvinus
جمعه 02 بهمن 1388, 19:59 عصر
اینی که من نوشتم براتون، ConnectionString هستش.

اگه بازم مشکلی بود بگین.

ebrahimv
جمعه 02 بهمن 1388, 22:09 عصر
سلام
يه جستوجو ميكردي خوب ميشود!!!!!
اين كدش به جاي DbName نام پايگاه داده بايد وارد بشه پايگاه داده هم بايد كنار برنامت داخل پوشه DataBase باشه
ايني كه گفتم هرجاي برنامت كه خواست ميتوني استفاده كني داخل فرم لود برنامه باشه بهتره
در موقع Setup هيچ كاري لازم نيست بكني


Dim cmd As New SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=True")
cmd.CommandText = "USE [master] IF NOT EXISTS (Select name from sys.databases WHERE name = N'" & DbName & "') EXEC sp_attach_db @dbname = N'" & DbName & "', @filename1 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & ".mdf', @filename2 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & "_log.ldf';"
cmd.Connection.Open()
cmd.ExecuteNonQuery()

غلامرضا شریفی
شنبه 03 بهمن 1388, 10:27 صبح
Dim cmd AsNew SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=True")
cmd.CommandText = "USE [master] IF NOT EXISTS (Select name from sys.databases WHERE name = N'" & DbName & "') EXEC sp_attach_db @dbname = N'" & DbName & "', @filename1 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & ".mdf', @filename2 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & "_log.ldf';"
cmd.Connection.Open()
cmd.ExecuteNonQuery()

اين مطلب شما ديتابيس را به SQLEXPRESS اضافه ميكند جهت Attach كردن به sql2000چه تغييري بايد داد

alimanam
شنبه 03 بهمن 1388, 10:41 صبح
این مطلب شما دیتابیس را به SQLEXPRESS اضافه میکند جهت Attach کردن به sql2000چه تغییری باید داد

با سلام

دوست عزیز Attach کردن یک پایگاه داده چیزی نیست به جز اضافه نمودن یک پایگاه داده به صورت موقت که با دستور deatach کردن قابل حذف شدن از لیست پایگاه داده های متصل به سرور است . توضیحات و کدهای دوست عزیزی که راهنمایی کردن کاملاً جامع و کاربردی هست . اگه مشکلی خاصی با این نوع اتصال پایگاه داده به هر سروری داشتی باز مشکلتون رو بگین که دوستان دیگه هم هر کمکی از دستشون برمیاد دریغ نکنن .

یا علی

ebrahimv
شنبه 03 بهمن 1388, 10:42 صبح
من كار نكردم ولي فكر كنم فقط كانكشن فرق ميكنه

غلامرضا شریفی
شنبه 03 بهمن 1388, 16:19 عصر
دوست عزیز Attach کردن یک پایگاه داده چیزی نیست به جز اضافه نمودن یک پایگاه داده به صورت موقت که با دستور deatach کردن قابل حذف شدن از لیست پایگاه داده های متصل به سرور است . توضیحات و کدهای دوست عزیزی که راهنمایی کردن کاملاً جامع و کاربردی هست . اگه مشکلی خاصی با این نوع اتصال پایگاه داده به هر سروری داشتی باز مشکلتون رو بگین که دوستان دیگه هم هر کمکی از دستشون برمیاد دریغ نکنن .

یا علی
من با روش ايشان بانك را Attach ميكنم و سيستم هيچ خطائي هم نمي دهد و لي در sql 2000 كه Enterprise Manager را باز ميكنم اين بانك در ليست ديتابسها نيست

mina.net
یک شنبه 04 بهمن 1388, 19:20 عصر
سلام
یه جستوجو میکردی خوب میشود!!!!!
این کدش به جای DbName نام پایگاه داده باید وارد بشه پایگاه داده هم باید کنار برنامت داخل پوشه DataBase باشه
اینی که گفتم هرجای برنامت که خواست میتونی استفاده کنی داخل فرم لود برنامه باشه بهتره
در موقع Setup هیچ کاری لازم نیست بکنی


Dim cmd AsNew SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=True")
cmd.CommandText = "USE [master] IF NOT EXISTS (Select name from sys.databases WHERE name = N'" & DbName & "') EXEC sp_attach_db @dbname = N'" & DbName & "', @filename1 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & ".mdf', @filename2 = N'" & Application.StartupPath.ToString() & "\DataBase\" & DbName & "_log.ldf';"
cmd.Connection.Open()
cmd.ExecuteNonQuery()


سلام دوست عزیز
من از روش اتچ کردن وقتی برنامه به صورت تک کاربره مورد استفاده قرار می گیره استفاده می کنم. همونطور که دوست مون گفتن اتچ کردن یک راه موقت هست یعنی دیتابیس به سرور اضافه نمی شه و از طریق شبکه قابل دسترسی نیست. این چیزی که شما گذاشتید رو اولین باره دیدم. و از کد شما استفاده کردم ولی خطا می ده برای من. آیا این کد دیتابیس رو بصورت کامل به سرور نسبت خواهد داد؟
من از کد شما به این شکا استفاده کردم.


Dim cmd As New SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=True")
cmd.CommandText = "USE [master] IF NOT EXISTS (Select name from sys.databases WHERE name = N'farsh1') " + _
" EXEC sp_attach_db @dbname = N'farsh1', @filename1 = N'" & Application.StartupPath.ToString() _
& "\Data_Base\farsh1.mdf', @filename2 = N'" & Application.StartupPath.ToString() _
& "\Data_Base\farsh1_log.ldf';"
cmd.Connection.Open()
cmd.ExecuteNonQuery()

و خطا زیر رو داد.
Directory lookup for the file "F:\Documents and Settings\barbod\Desktop\CLEAR_FARSH\CLEAR_FARSH\bi n\Debug\Data_Base\farsh1.mdf" failed with the operating system error 5(error not
البته فایل موجود هست.

ACorvinus
یک شنبه 04 بهمن 1388, 20:16 عصر
سلام.

من یه بار براتون یه ConnectionString دادم که باید کارتون رو را مینداخت، ولی حالا که قبولش ندارین، یه نگاهی به اینم بندازین.


http://barnamenevis.org/forum/showpost.php?p=827023&postcount=6

غلامرضا شریفی
یک شنبه 04 بهمن 1388, 20:36 عصر
من یه بار براتون یه ConnectionString دادم که باید کارتون رو را مینداخت، ولی حالا که قبولش ندارین، یه نگاهی به اینم بندازین.

گفته شما درست و اين برنامه به درستي عمل ميكند چرا در sql2000 و Enterprise Manager نام بانك ديده نمي شود و جهت مشاهده بانك در Enterprise Manager چه تغييري بايد داد

alimanam
دوشنبه 05 بهمن 1388, 11:03 صبح
با سلام

دوست عزیزی که می خواستن با استفاده از Attach کردن پایگاه داده به sql server از برنامه استفاده کنن این توضیحات رو میدم ایی شاا.. که مفید واقع بشه .

ببین دوست عزیز وقتی که شما از یک پایگاه داده اس کیو ال با فرمت mdf در برنامه استفاده میکنین و میخواین ازاین برنامه روی سیستم دیگه استفاده کنین به طبع باتوجه به Connection String که استفاده کردین روش رو انتخاب میکنیم .

مثلاٌ شما دیتابیس رو به صورت Attach در connection string معرفی کردین شما برای استفاده همچین برنامه تنها 1 مورد رو دربرنامه نصب چک میکنیم و اون هم اینه که دربخش نیازمندیهای برنامه تیک sql server express رو بزنی تا اگه برروی سیستم مقصد sql server نصب نبود یک ورژن express که حداقل نیاز رو برطرف میکنه نصب بشه به همین راحتی .

اگه باز با مشکلی برخورد کردی بگو تا یه پروژه نمونه واست آپ کنم .

یا علی

غلامرضا شریفی
سه شنبه 06 بهمن 1388, 09:29 صبح
اگه باز با مشکلی برخورد کردی بگو تا یه پروژه نمونه واست آپ کنم .

تشکر از شما منتظر هستم
ضمنا اگر خواسته باشيم در Enterprise Manager كه sql2000 كامل نصب شده بانك Attach شده را ببينيم چه تغييري بايد در دستورهاي ارسالي بدهيم

mina.net
چهارشنبه 07 بهمن 1388, 11:15 صبح
سلام دوست عزیز
من برنامه شما رو دانلود کردم جالب بود.
وقتی از کانکشن به این شکل استفاده کردم جواب داد.
Public Const conString As String = "Server=.;Integrated Security=true;DataBase
ولی به این حالت جواب نمی ده.
Public Const conString As String = "Server=.\SQLEXPRESS;Integrated Security=true;DataBase="
و خطایی زیر صادر می شه
Directory lookup for the file "F:\Documents and Settings\barbod\Desktop\CLEAR_FARSH\CLEAR_FARSH\bi n\Debug\Farsh.MDF" failed with the operating system error 5(error not found).
در ضمن آیا با SQLEXPRESSهم می شه تحت شبکه کار کرد؟

mina.net
چهارشنبه 07 بهمن 1388, 18:12 عصر
سلام دوستان
جواب رو پیدا کردم. چون من دیتابیس رو با 2008 ساخته بودم ولی تو سیستم مقصد می خواستم با 2005 اون رو اتچ کنم این خطا رو می داد.
ولی یک مشکل هنوز هست. چرا شبکه جواب نمی ده. من از کانکشن زیر استفاده کردم.


"Server=".\SQLEXPRESS;Integrated Security=true;DataBase=Farsh"

FastCode
چهارشنبه 07 بهمن 1388, 18:31 عصر
internal string GetMasterConnectionString()
{
SqlConnectionInfo info = new SqlConnectionInfo("Behrooz-PC");
info.UserName = "Sa";
info.Password = "PaSSWoRD";
info.UseIntegratedSecurity = false;
return info.ConnectionString;
}
public static void Attach(string Database, string Path_M, string Path_L)
{
Attach(GetMasterConnectionString(), Database, Path_M, Path_L);
}
public static void Attach(string ConnectionString, string Database, string Path_M, string Path_L)
{
//ServiceController controller = new ServiceController("MSSQLSERVER", ".");
//if (controller.Status == ServiceControllerStatus.Stopped)
//{
// controller.Start();
// controller.WaitForStatus(ServiceControllerStatus.R unning);
//}
SqlConnection connection = new SqlConnection(ConnectionString);
connection.Open();
new SqlCommand("EXECUTE sp_attach_db @dbname = N'" + Database + "', @filename1 = N'" + Path_M + "', @filename2 = N'" + Path_L + "'", connection).ExecuteNonQuery();
}

mina.net
چهارشنبه 07 بهمن 1388, 21:46 عصر
سلام
من کد بالا رو تو یک سایت به Vb ترجمه کردم ولی خطا داره


FriendFunction GetMasterConnectionString() AsString
Dim info AsNew SqlConnectionIno("Behrooz-PC")
info.UserName = "Sa"
info.Password = "PaSSWoRD"
info.UseIntegratedSecurity = False
Return info.ConnectionString
EndFunction
PublicSharedSub Attach(ByVal Database AsString, ByVal Path_M AsString, ByVal Path_L AsString)
Attach(GetMasterConnectionString(), Database, Path_M, Path_L)
EndSub
PublicSharedSub Attach(ByVal ConnectionString AsString, ByVal Database AsString, ByVal Path_M AsString, ByVal Path_L AsString)
Dim connection AsNew SqlConnection(ConnectionString)
connection.Open()
New SqlCommand((("EXECUTE sp_attach_db @dbname = N'" & Database & "', @filename1 = N'") + Path_M & "', @filename2 = N'") + Path_L & "'", connection).ExecuteNonQuery()
EndSub


اگه اشتباه ترجمه شده لطفا راهنمایی کنید ،
SqlConnectionIno خطای type not found
و GetMasterConnectionString خطای تصویر زیر را دارد

http://barnamenevis.org/forum/attachment.php?attachmentid=43259&stc=1&d=1264618186

kharabati
پنج شنبه 08 بهمن 1388, 14:48 عصر
سلام.
خسته نباشید.
فایل زیر رو دانلود کنید .
شاد کمک کرد بهتون.
http://barnamenevis.org/forum/downloads.php?do=file&id=80