PDA

View Full Version : Connection String همکاری در ساخت بکاپ گیری



saadi2
جمعه 27 شهریور 1388, 01:40 صبح
با سلام خدمت اساتید گرامی
من برای کانکت شدن به دیتابیس sql که در پوشه خود برنامه قرار داره از این connection string استفاده میکنم:


Dim conString As String = "Server=.\sqlexpress;" _
& "attachdbfilename=|datadirectory|\Teachers.mdf;" _
& "initial catalog=Teachers;" _
& "Integrated Security=SSPI;" _
& "User Instance=True"



این connection string بانک اطلاعاتی رو در هنگام اجرای برنامه attach می کنه و درستم کار میکنه ولی تا وقتی که برنامه درهمون مسیر بمونه و اگر جای برنامه رو مثلا از درایو C به درایو ِ D تغییر بدیم با خطایی مواجه میشیم که درهنگام attach میگه که این بانک اطلاعاتی قبلا در مسیر c اتچ شده. دلیلشم میدونم چون من در کانکشنم از این قسمت استفاده کردم:


"initial catalog=teachers"


دلیلشم اینه که فقط در این حالت میشه به وسیله ی SMO از بانک Backup گرفت.


حالا بعد اینهمه پر حرفی سوالم اینه:

چجوری میشه بانک اطلاعاتی رو که به این وسیله attach کردم را detach کنم؟

باید بگم که حالت معمول detach کردن دیتابیس رو امتحان کردم و نشد اصلا لیست این نوع اتچ کردن دیتابیس کجا ذخیره میشه ؟

دارم روی ابکاپ گیری از این نوع دیتابیسها که کنار برنامه هست کار میکنم که اگه به نتیجه برسم در همین پست سورسشو قرار میدم.

پیشاپیش ممنونم.

majid_vb_2008
جمعه 27 شهریور 1388, 12:54 عصر
براي بكاپ گيري از ديتابيس اتچ شده برو به اي پست اونجا كامل بحث شده

پشتيبان گيري از SQL در VB.net (http://barnamenevis.org/forum/showthread.php?t=178801) ‏

saadi2
جمعه 27 شهریور 1388, 13:13 عصر
آقا مجید تو اون تاپیک که من خودمم با شما همکاری داشتم.

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

saadi2
جمعه 27 شهریور 1388, 17:20 عصر
یعنی هیچ کس نمیتونه کمک کنه؟
موقعی که برنامه رو اجرا میکنم میزنه this database is exist و موقعی هم که میخوام دیتچ کنم میزنه database is not exist لطفا جواب بدید

alimanam
شنبه 28 شهریور 1388, 01:17 صبح
با سلام

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

SqlConnection.ClearAllPools()
بعدش میتونی هرکاری با پایگاه داده ات انجام بدی

یا علی

saadi2
شنبه 28 شهریور 1388, 14:26 عصر
با تشکر از پاسختون.
ولی مشکلم حل نشد. این خطایی هست که میده :

Database 'C:\Documents and Settings\Sadroddin\My Documents\Visual Studio 2005\Projects\New Attach Smo bakup\New Attach Smo bakup\bin\Debug\students.mdf' already exists.
Could not attach file 'C:\Documents and Settings\Sadroddin\Desktop\New Attach Smo bakup\New Attach Smo bakup\bin\Debug\students.mdf' as database 'students'.

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

من از راه sp_detach .... عمل کردم ولی میگه این دیتابیس با این نام وجود نداره.

حالا سوال من اینه که چجوری باید این دیتابیسی رو که به این شکل attach شده رو detach کنم؟

alimanam عزیز لطفا اگه چیزی به ذهنتون میرسه کمک کنید. ممنون

alimanam
شنبه 28 شهریور 1388, 14:38 عصر
دوست عزیز سلام

آیا حتماً باید با Smo بکاپ بگیری ؟ اگه جواب مثبته کدهاتو بزار ببینم میتونم کاری انجام بدم ( من با این روش زیاد آشنایی ندارم ) اگه هم اصراری نیست و فقط میخوای کار Backup و Restore صحیح انجام بشه که کداش آماده است بگو تا واست بفرستم .

یا علی

saadi2
شنبه 28 شهریور 1388, 21:57 عصر
راستش من تو بکاپ گرفتن با شیوه دیگر اصلا مشکلی ندارم. یکم گیر دادم که این مشکل و حل کنم که کنجکاو شدم فقط که بدونم دیتابیسهایی که به این شکل attach میشن رو از کجا و با چه کدی detach کنم همین. هیچ مشکل دیگه ای نیست. به هر حال ممنونم از پاسختون

alimanam
یک شنبه 29 شهریور 1388, 01:57 صبح
با سلام

اینو تست کردی ؟


server.KillProcess(db.Name)
db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single
db.Alter(TerminationClause.RollbackTransactionsImm ediately)
server.DetachDatabase(db.Name, True)

این جا رو هم سر بزن خیلی مفیده :

واسه بکاپ گرفتن با SMO (http://www.sqldbatips.com/showarticle.asp?ID=37)
واسه ریستور کردن با SMO (http://www.sqldbatips.com/showarticle.asp?ID=40)

biotechsoft
شنبه 28 اسفند 1389, 22:20 عصر
خوهشا دوستانی که ابتدای کار هستن رو صحیح ، راحت و کامل راهنمایی کنید:
ایجاد بک آپ:

'save path
Dim saveFileDialog1 As New SaveFileDialog
saveFileDialog1.InitialDirectory = "C:\"
saveFileDialog1.Title = "ذخیره فایل پشتیبان"
saveFileDialog1.DefaultExt = "bck"
saveFileDialog1.Filter = "BackUp files (*.BCK)|*.BCK"
saveFileDialog1.FileName = "Artesh-" & Me.lbl_hijri_date.Text & ".BCK"

If (saveFileDialog1.ShowDialog() = DialogResult.OK) Then
Dim path As String
path = saveFileDialog1.FileName
'save code
Dim cmd As New SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("server=MORTEZA-PC;database=Artesh;integrated security=true;")
cmd.CommandText = "backup database Artesh to disk=@path"
Try
cmd.Parameters.Add("@path", SqlDbType.NVarChar).Value = path.ToString
cmd.Connection.Open()
cmd.ExecuteNonQuery()
MessageBox.Show("نسخه پشتیبان ایجاد شد")
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cmd.Connection.Close()
End Try
End If

biotechsoft
شنبه 28 اسفند 1389, 22:21 عصر
خوهشا دوستانی که ابتدای کار هستن رو صحیح ، راحت و کامل راهنمایی کنید:
بازخوانی اطلاعات بک آپ:

'save path
Dim OpenFileDialog1 As New OpenFileDialog
OpenFileDialog1.InitialDirectory = "C:\"
OpenFileDialog1.Title = "انتخاب فایل پشتیبان"
OpenFileDialog1.DefaultExt = "bck"
OpenFileDialog1.Filter = "BackUp files (*.BCK)|*.BCK"

If (OpenFileDialog1.ShowDialog() = DialogResult.OK) Then

Dim path As String
path = OpenFileDialog1.FileName
'restore code
Dim cmd As New SqlClient.SqlCommand()
cmd.Connection = New SqlClient.SqlConnection("server=MORTEZA-PC;database=MASTER;integrated security=true;")
cmd.CommandText = "ALTER DATABASE Artesh SET SINGLE_USER with ROLLBACK IMMEDIATE;" & _
"RESTORE DATABASE Artesh FROM DISK= @path with REPLACE;" & _
"ALTER DATABASE Artesh SET MULTI_USER"
Try
cmd.Parameters.Add("@path", SqlDbType.NVarChar).Value = path.ToString
cmd.Connection.Open()
cmd.ExecuteNonQuery()
MessageBox.Show("بازسازی اطلاعات موفقیت آمیز بود،به صورت خودکار از برنامه خارج می گردید")
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cmd.Connection.Close()
End Try
Me.Close()
End If

biotechsoft
شنبه 28 اسفند 1389, 22:22 عصر
در ضمن از TOOLBAR COMPONENTS باید یک OpenFileDialog به برنامه اظافه کنید(نام آن بصورت خودکار OpenFileDialog1 است...

ali_Bahale
جمعه 09 اردیبهشت 1390, 16:04 عصر
سلام من تازه وارد این بحث شدم
منم این مشکلو دارم ولی نمیدونم چطور Connection string رو تنظیم کنم تا با نام پایگاه د اده ازش بک آپ بگیرم