ورود

View Full Version : بستن تمام connection های فعال + نمایش لیستی از کلیه connection های فعال



rezajafary
جمعه 04 اردیبهشت 1388, 01:20 صبح
با سلام
امیدوارم یکی پیدا بشه جواب این سوال من رو بده.
دوستان میخواستم بدونم چطور میشه یه لیست از تمام connection هایی که به data base ما متصل هستند بدست بیارم.
راستش من برا یه برنامه کوچیک از sql Express استفاده کردم ، از database backup میگیرم ولی وقت restore کردن خطا میده که دیتابیس در حال استفاده میباشد.
کد restor من اینه :
try
{
openFileDialog1.DefaultExt = "bak";
openFileDialog1.FileName = "c:\\databasebackup";
openFileDialog1.Filter = "Backup files (*.bak)|*.bak";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Demo Restore File Dialog";
string str = openFileDialog1.FileName;
SqlConnection Cnn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\navab safavi software\\navab\\dg.mdf'" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand s = new SqlCommand("RESTORE DATABASE @name FROM DISK ='" + str + "' WITH REPLACE", Cnn);
s.Parameters.AddWithValue("@name", "D:\\navab safavi software\\navab\\dg.mdf");
Cnn.Open();
Cnn.ChangeDatabase("master");

label1.Text = Cnn.Database.ToString();
s.ExecuteNonQuery();
Cnn.Close();
MessageBox.Show("عمليات بازيابي با موفقيت انجام پذيرفت");
this.Close();
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}


اگه این کد رو به عنوان صفحه اول برنامه یعنی قبل از اینکه هیچ connection دیگه ای بخوام ایجاد کنم ، اجرا کنم با موفقیت عملیات restore رو انجام میده.
اما اگه با اجرای برنامه صفحه login رو لود کنم باعث میشه که یه connection ایجاد بشه البته این connection نمودونم اسمش چیه اخه در صفحه login از select query به صورت wizard استفاده کردم و نمودونم ساختار اتصال به database وقتی از wizard استفاده مکنم چیه چه connectionای ایجاد میکنه که لا اقل خودم به صورت دستی closeاش کنم.
برای همین تنها راهی که به نظرم مییاد اینه که بتونم ابتدای صفحه ، تمتم connection های فعال رو ببندم.
میدونم که قصه طولانی شد
امیدوارم یه نفر کار درست پیدا بشه این متن رو بخونه و یه راهی جلوی پتی من بزاره
در ضمن کد صفحه login هم که فکر میکنم یه connection به databaseایجاد میکنه اینه
managersTableAdapter.FillBy(this.navabDataSet.mana gers, textBox1.Text, textBox2.Text);
ممنونم که وقت گذاشتید و این سوال رو خوندید حتی اگه جواب هم ندادید باز هم ممنون ا وقتتون که صرف کردید.
به امید جواب کار راه انداز.

mom alone
جمعه 04 اردیبهشت 1388, 18:31 عصر
بهترین کار برای بستن کانکشن ها اینکه دیتا بیس رو offline کنی
سپس عمل بازیابی رو انجام بدی


ALTER DATABASE aloneabouzar SET OFFLINE WITH ROLLBACK IMMEDIATE

rezajafary
شنبه 05 اردیبهشت 1388, 01:38 صبح
ممنونم که یه نفر پیدا شد جواب بده
ولی دوست عزیز من از کدی که فرستادی راستیتش درست سر درنیاوردم
من الان از sqlexpress استفاده میکنم
در ضمن کلمه ای به نام alter اصلا شناخته نشده است
میشه یکم بیشتر توضیح بدی که توی c# باید چظور دیتابیس رو offline کنم
ممنون

rezajafary
شنبه 05 اردیبهشت 1388, 10:36 صبح
دوست عزیز متوجه دستورت شدم
و به صورت زیر نوشتمش
فقط دقت کن که از sqlexpress استفاده کردم


SqlConnection Cnn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\navab safavi software\\navab\\dg.mdf'" + ";Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand s1 = new SqlCommand("ALTER DATABASE @name SET OFFLINE WITH ROLLBACK IMMEDIATE", Cnn);
s1.Parameters.AddWithValue("@name", "D:\\navab safavi software\\navab\\dg.mdf");
SqlCommand s = new SqlCommand("RESTORE DATABASE @name FROM DISK ='" + str + "' WITH RECOVERY,REPLACE", Cnn);
s.Parameters.AddWithValue("@name", "D:\\navab safavi software\\navab\\dg.mdf");

Cnn.Open();
s1.ExecuteNonQuery();
Cnn.ChangeDatabase("master");

label1.Text = Cnn.Database.ToString();
s.ExecuteNonQuery();
Cnn.Close();
MessageBox.Show("عمليات بازيابي با موفقيت انجام پذيرفت");
this.Close();


اما خطای زیر رو میده
Incorrect syntax near '@name'.
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
Incorrect syntax near 'IMMEDIATE'.

ممنون میشم بازم کمکم کنید

rezajafary
شنبه 05 اردیبهشت 1388, 15:46 عصر
اقا کار من گیره
چرا این همه برنامه نویس این مطلب رو میخونین ولی جواب نمیدین؟
یکی یه کاری بکنه
من باید این پروژه رو بزودی تحویل بدم
منتظر حضور سبزتان هستیم

mom alone
شنبه 05 اردیبهشت 1388, 17:52 عصر
نازت شم
شما به پارامتر name باید نام دیتا بیس رو بفرستی
نه آدرس دیتا بیس رو

mom alone
شنبه 05 اردیبهشت 1388, 17:55 عصر
ضمنا پیش نهاد می کنم از atach دیتابیس فقط در فرم اول برنامه ات استفاده کن
بقیه جاها کانکشن معمولی بنویس

rezajafary
شنبه 05 اردیبهشت 1388, 23:45 عصر
ممنون از لطفت
تو بهترین مام دنیایی
مشکلم با تغییر ادرس به اسم هم حل نشد ولی یه جوره دیگه حلش کردم
ولی تنها مزیت این مشکلاتم این بود که با دوست خوبی مثل تو اشنا شدم
موفق باشی