PDA

View Full Version : چگونگی فهمیدن attach بودن یک database در SQL 2000 با #C



bazardeh
یک شنبه 19 تیر 1390, 12:06 عصر
چگونه می توان فهمید یک database مثل rsr در بانک attach است

تا با توجه به فهمیدن این قضیه ، بتوانیم کد Attach را اجرا کنیم

B.I.O.H.A.Z.A.R.D
یک شنبه 19 تیر 1390, 12:21 عصر
این کد براتون جواب نداد مگه:

private void button1_Click(object sender, EventArgs e) {
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=(local);Initial Catalog=master;Integrated Security=True";
con.Open();

string str = "use master;" +
"EXECUTE sp_attach_db @dbname = N'SaynaDB' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\Data\\SaynaDB.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + "\\Data\\SaynaDB_log.ldf'" ;

SqlCommand cmd = new SqlCommand(str,con);
cmd.ExecuteNonQuery();
con.Close();


;(" شد Attach دیتابیس با موفقیت") MssageBox.Show
{

catch (Exception x)
{
if(x.Message.IndexOf("already exists")>=0)

;(" دیتابیس موجود است").MssageBox.Show
else
MessageBox.Show(x.Message);
}
}

bazardeh
یک شنبه 19 تیر 1390, 12:34 عصر
بله کاملاً جواب داد
من من می خوام با فهمیدن attach بودن یا attach نبودن database باتون کد بالا را فعال یا غیر فعال کنم
با تشکر از بزرگواری شما

B.I.O.H.A.Z.A.R.D
یک شنبه 19 تیر 1390, 13:17 عصر
بله کاملاً جواب داد
من من می خوام با فهمیدن attach بودن یا attach نبودن database باتون کد بالا را فعال یا غیر فعال کنم
با تشکر از بزرگواری شما

خواهش میکنم.

خب با فعال/غیرفعال کردن button که مشکلی ندارید، دارید؟

bazardeh
یک شنبه 19 تیر 1390, 14:36 عصر
خب با فعال/غیرفعال کردن button که مشکلی ندارید، دارید؟

من باید بدونم که database من attach است که button را غیر فعال کنم و اگر attach نیست فعال کنم
این کار چگونه صورت می گیرد

magnet
یک شنبه 19 تیر 1390, 14:36 عصر
میتونید از این کد هم در اس کیو ال استفاده کیند:

IF NOT EXISTS(
SELECT *
FROM sys.databases
WHERE name = N'<database_name, sysname, your_database_name>'
)
CREATE DATABASE <database_name, sysname, your_database_name>
ON PRIMARY (FILENAME = '<database_primary_file_path,,C:\Program files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\your_data base_name.MDF>')
FOR ATTACH
GO

Legend M.A.R
یک شنبه 19 تیر 1390, 16:17 عصر
میتونید از این کد هم در اس کیو ال استفاده کیند:

IF NOT EXISTS(
SELECT *
FROM sys.databases
WHERE name = N'<database_name, sysname, your_database_name>'
)
CREATE DATABASE <database_name, sysname, your_database_name>
ON PRIMARY (FILENAME = '<database_primary_file_path,,C:\Program files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\your_data base_name.MDF>')
FOR ATTACH
GO

با استفاده از همین روش یعنی Select name from sysdatabases where sid <> 0x01 لیست کاملی از بانک های اطلاعاتی که توسط کاربر ایجاد شده یا attach شده رو بدست میاری

B.I.O.H.A.Z.A.R.D
یک شنبه 19 تیر 1390, 16:53 عصر
من باید بدونم که database من attach است که button را غیر فعال کنم و اگر attach نیست فعال کنم
این کار چگونه صورت می گیرد

متاسفانه sql server رو روی سیستم ندارم وگرنه بهتر کمکتون میکردم.

به نظرم شما توی لود برنامه دیتابیس رو اتچ کنید، اگه از قبل اتچ نشده باشه که هیچی، با کد هایی گذاشتم اتچ میکنید، اگرم اتچ شده باشه قبلاً میتونید اونو توی try catch بذارید، و هیچ پیغامی نشون ندید.

اگرم خواستین میتونین هنگام خروج از برنامه دیتابیس رو هم detach کنید که نیازی هم به این چک کردن نداشته باشید.

موفق باشید

bazardeh
یک شنبه 19 تیر 1390, 18:20 عصر
با تشکر
فقط از این همه attch مشکلی پیش نمی آید

B.I.O.H.A.Z.A.R.D
یک شنبه 19 تیر 1390, 18:32 عصر
با تشکر
فقط از این همه attch مشکلی پیش نمی آید

اگر دیتابیس اتچ شده باشه از قبل، اصلا دستور شما اجرا نمیشه و ادامه برنامه به بلاک catch منتقل میشه. پس مشکلی نیست.

bazardeh
یک شنبه 19 تیر 1390, 18:48 عصر
در مورد detach شدن ، این کار لازم است
در صورت استفاده ،در کد چه تغییراتی پیش می آید
با تشکر

B.I.O.H.A.Z.A.R.D
یک شنبه 19 تیر 1390, 19:15 عصر
در مورد detach شدن ، این کار لازم است
در صورت استفاده ،در کد چه تغییراتی پیش می آید
با تشکر

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


SqlConnection con = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=master;Integrated Security=True");
SqlCommand com = new SqlCommand();
com.CommandText = "sp_detach_db @dbname = N'databasename'";
com.Connection = con;
con.Open();
try
{
com.ExecuteNonQuery();
MessageBox.Show("ارتباط با بانک اطلاعاتی قطع شد");
}
catch
{

}
finally
{
com.Dispose();
con.Close();
}

bazardeh
یک شنبه 19 تیر 1390, 20:17 عصر
کاملا جواب داد ... تشکر