PDA

View Full Version : سوال: نحوه کپی کردن mdf و ldf از طریق کد



amingole
یک شنبه 03 مرداد 1389, 16:28 عصر
با سلام به همه
من تازه اینجا اومدم
می خوام از طریق کد نویسی mdfو ldf را به عنوان backup یک جا دیگه کپی کنم ولی نمی زاره چون میگه دیتا بیست بازه ولی من هر جا استفاده کردم dis کردم.باید چی کار کنم کلا ارتباط قطع بشه.
با تشکر

Saeed.Masoumi
یک شنبه 03 مرداد 1389, 16:40 عصر
سلام مشکل شما ربطی به کانکشن شما نداره.شما باید دتابیس رو از دتابیس سرورتون (Sql server) جدا کنید (Detach ) سپس کپی کنید سپس دوباره (Attach) کنید.

ostovarit
یک شنبه 03 مرداد 1389, 16:59 عصر
با سلام به همه
من تازه اینجا اومدم
می خوام از طریق کد نویسی mdfو ldf را به عنوان backup یک جا دیگه کپی کنم ولی نمی زاره چون میگه دیتا بیست بازه ولی من هر جا استفاده کردم dis کردم.باید چی کار کنم کلا ارتباط قطع بشه.
با تشکر

من هم همین کار رو میکنم و با کد زیر :


string root = (Directory.CreateDirectory(folderBrowserDialog1.Se lectedPath + "BackUp" + DatePath()).FullName);
File.Copy(Application.StartupPath + @"\Databases\Database.mdf", root + "\\Database.mdf", true);
File.Copy(Application.StartupPath + @"\Databases\Database_log.ldf", root + "\\Database_log.ldf", true);
FarsiMessage.Show(" فایل پشتیبانی با موفقیت ایجاد شد.", "اطلاعات", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Information);



root مسیری که کاربر انتخاب میکنه از طریق folderBrowserDialog1 سوالی بود بگو

amingole
یک شنبه 17 مرداد 1389, 12:41 عصر
ghorbune harchi bache ba marefate

aryan2005
پنج شنبه 08 مهر 1389, 08:54 صبح
سلام من نمی دونم چطور باید قبل از استفاده از دستورات بالا بانک را dettach کنم و چطور مجدداً آن را به حالت اولیه باز گردانم به همین خاطر هنگام استفاده از دستورات کپی اخطاری مبنی بر مورد استفاده بودن فایل توسط برنامه دیگر ظاهر می شود لطفاً روش قطع ارتباط فایلها با بانک را توضیح دهید

javad_r_85
پنج شنبه 08 مهر 1389, 09:05 صبح
با سلام به همه
من تازه اینجا اومدم
می خوام از طریق کد نویسی mdfو ldf را به عنوان backup یک جا دیگه کپی کنم ولی نمی زاره چون میگه دیتا بیست بازه ولی من هر جا استفاده کردم dis کردم.باید چی کار کنم کلا ارتباط قطع بشه.
با تشکر

سلام .خوب چه کاریه که کپی کنید با استفاده از کوئری بکاپ بگیرید هم را حت تره هم دردسرش کمتره هم حجمش کمتره یه نمونه کد می زارم .
اگر بگرید مطالب بیشتری پیدا خواهید کرد



string query = "BACKUP DATABASE databaseNAME TO DISK ='d:\\data\\Bkup" + (new PersianDate(DateTime.Now).ToString("D")) + ".BAK" + "'";

aryan2005
پنج شنبه 08 مهر 1389, 11:11 صبح
من از روش backup نیز استفاده کردم اما با پیغامی مواجه میشم که می گه نام بانک وجود ندارد ضمن اینکه از دو برنامه مجزا با دو بانک مشابه استفاده کرده ام و در یکی اطلاعات وارد شده و باید این اطلاعات به برنامه دوم منتقل شود

صباح فتحی
پنج شنبه 08 مهر 1389, 11:47 صبح
این کد واسه بکاپ مشکلی نداره:

private void button3_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
MessageBox.Show("در حین عملیات به چیزی دست نزنید");
System.IO.Directory.CreateDirectory(MasterPath + @"\BackupLibrary");
//پشتیبان گیری از بانک اطلاعاتی
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=(local);database=Library;Integrated Security=SSPI";
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
//BACKUP DATABASE نام بانک اطلاعاتی TO DISK = 'مسیر پشتیبان گیری بانک اطلاعاتی'
string query = "BACKUP DATABASE Library TO DISK = '" + MasterPath + @"\BackupLibrary" + "\\Library.MDF" + "'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();

MessageBox.Show("پشتیبان گیری به درستی انجام شد");
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}
}
else
{
MessageBox.Show(" ! " + "مسیر انتخاب نشده است", "خطا");
}
}

صباح فتحی
پنج شنبه 08 مهر 1389, 11:50 صبح
با سلام به همه
من تازه اینجا اومدم
می خوام از طریق کد نویسی mdfو ldf را به عنوان backup یک جا دیگه کپی کنم ولی نمی زاره چون میگه دیتا بیست بازه ولی من هر جا استفاده کردم dis کردم.باید چی کار کنم کلا ارتباط قطع بشه.
با تشکر
چرا فایل رو کپی میکنی؟؟همبن بکاپ کافیه دیگه...اگرم خیلی هم به این روش اصرار دارید باید اول دیتابیس رو دیتیچ کنید...بعد عملیات کپی انجام بگیره

صباح فتحی
پنج شنبه 08 مهر 1389, 11:51 صبح
اینم یک نمونه کد برای اتچ و دیتچ دیتابیس:
http://www.barnamenevis.org/forum/showthread.php?t=248970
موفق باشید

aryan2005
پنج شنبه 08 مهر 1389, 12:15 عصر
آقا صباح سلام
من از روش شما استفاده کرده اما در هنگام اجرا پیغامی مبنی بر نبود نام بانک (در مثال شما library) ظاهر می شود ضمن اینکه بانک من از نوع attached شده در SQlexpress می باشد

صباح فتحی
پنج شنبه 08 مهر 1389, 15:46 عصر
آقا صباح سلام
من از روش شما استفاده کرده اما در هنگام اجرا پیغامی مبنی بر نبود نام بانک (در مثال شما library) ظاهر می شود ضمن اینکه بانک من از نوع attached شده در SQlexpress می باشد
به احتمال زیاد مشکل در کانکشن استرینگ باشه!ً
کانکشن رو به این تغییر بده

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True");
SqlCommand com=new SqlCommand();
com.Connection = con;
con.Open();
com.CommandText="Use master backup database [phonebank] to disk=N'd:\\o'";
com.ExecuteNonQuery();
con.Close();
}

aryan2005
جمعه 09 مهر 1389, 01:39 صبح
ضمن تشکر از راهنمائی های شما
مشکلم با استفاده از روش Dettach و کپی فایلهای بانک حل شد

hojjatshariffam
جمعه 09 مهر 1389, 03:43 صبح
من دی اتچ نمیکنم و کپی رو انجام میدم هیچ مشکلی هم ندارم!
من فکر نکنم بدون دیتچ کردن دیتا بیس به هیچ عنوان از فایل های دیتا بیس کپی برداری بشه ، مگه اینکه سرور Stop باشه چون این دوفایل در هر لحظه در حال استفاده بوده و OPEN می باشند حتی اگر هیچ کانکشنی در حال حاظر در حالت کانکت نباشد
فکر کنم منظور شما بک آپ گیری باشه

در جواب دوستمون که سئوال تاپیک رو پرسیدن باید بگم که اگه شما می خواید با کد فایل ها رو کپی کنید ، که در اینصورت نیاز به دیتچ کردت دیتا بیس دارید ! و این کار رو میرید بصورت دستی از اسکیو اس سرور انجام میدین ، پس همونجا کپی رو هم از طریق اکپلورر ویندوز انجام بدین دیگه ، چه کاریه
یا اینکه دیتچ رو هم از طریق کد انجام بدین ، سپس اتچش کنید که برای این کارم یکی از دوستان تو یکی از پست ها زحمتشو کشیدند و یه لینک خوب دادند ، مراجعه کنید.

در کل برای پیش گیر ی از بسیاری از مشکلات ، سعی کنید به جای این کار از بک آپ گیری استفاده کنید
موفق باشید

group45
جمعه 09 مهر 1389, 10:27 صبح
دوست عزیز منم این مشکلو داشتم واگه یه جستجوی کوچیک میکردی پستامو می دیدی

من یه یرنامه جدا نوشتم که از دیتابیسم کپی بگیره(برنامه2) و برنامه رو کنار برنامه اصلیم(برنامه1) گذاشتم.بعد زمانی که برنامه1 میخواد کپی کنه اول برنامه2 رو بیار بالا بعد برنامه1 رو ببند و وقتی کپی تموم شد برنامه2 اول برنامه1 رو بیاره بالا بعد خودش بسته بشه. ( اینم کلک مرغابی ) :لبخند:
اگرم نیاز به کد هست بگو برات بزارم

aghayex
جمعه 09 مهر 1389, 10:49 صبح
آخه این روشها چیه نشون دوستان میدید:قهقهه:
برای این کار 4 کار باید بکنی :
1 - تست کردن اینکه دیتابیس اتچ هست یا نه
2 - اگه اتچ بود دی اتچ می کنیم ( تا اینجا ارتباط دیتا بیس با اس کیو ال قطع شد )
3 - با یه نصف خط ارتباط دیتابس رو هم از برنامه قطع می کنیم
4 - شروع به کپی کردن می کنید



SqlConnection sqlcon = new SqlConnection("Data Source=.\\SQLEXPRESS;initial catalog=master;Integrated security=true");


SqlDataAdapter sqlda = new SqlDataAdapter();
sqlda.SelectCommand = new SqlCommand();
sqlda.SelectCommand.Connection = sqlcon;
DataTable s1 = new DataTable();
sqlda.SelectCommand.CommandText = "select * from sys.databases where name='" + AppDomain.CurrentDomain.BaseDirectory + "db\\Database1.mdf'";
sqlcon.Open();
sqlda.SelectCommand.ExecuteNonQuery();
sqlda.Fill(s1);


if (s1.Rows.Count > 0)
{//مرحله2
sqlda.SelectCommand.CommandText = "sys.sp_detach_db '" + AppDomain.CurrentDomain.BaseDirectory + "db\\Database1.mdf'";
sqlda.SelectCommand.ExecuteNonQuery();
}
sqlcon.Close();
SqlConnection.ClearPool(sqlcon);//مرحله3
sqlcon.Dispose();//مرحله3



4 - مرحله کپی فیل ها