PDA

View Full Version : چک کردن اتچ بودن یا نبودن دیتابیس



Collector
یک شنبه 27 شهریور 1390, 18:25 عصر
سلام

این برنامه قراره چک کنه که دیتابیس اتچ شده یا خیر اما درست کار نمیکنه. لطفا مشکل رو بررسی کنید.

Reza_Yarahmadi
یک شنبه 27 شهریور 1390, 19:32 عصر
کدتون رو بصورت زیر تغییر بدید
SqlConnection con = new SqlConnection();
try
{
con.ConnectionString = "Data Source=(local);Initial Catalog=MA;Integrated Security=True";
con.Open();
con.Close();
MessageBox.Show("دیتابیس موجود هست");
}
catch (Exception x)
{
try
{
con.ConnectionString = "Data Source=(local);Initial Catalog=master;Integrated Security=True";
con.Open();
string str = "EXECUTE sp_attach_db @dbname = N'MA'," +
"@filename1 = N'" + Application.StartupPath + "\\MA.mdf'," +
"@filename2 = N'" + Application.StartupPath + "\\MA_log.ldf'";

SqlCommand cmd = new SqlCommand(str, con);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("اتچ با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Collector
دوشنبه 28 شهریور 1390, 00:07 صبح
من کد رو در برنامه قرار دادم اما جواب نداد لطفا برنامه ای که جواب می دهد را آپلود کنید.

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 00:26 صبح
برای اتچ کردن دیتابیس از دستور Create Database dbname for attacht

استفاده کنید چون استورد پروسیجر sp_attach_db تو SQL SERVER های بالای 2000 دیگه ساپورت نمیشه

http://msdn.microsoft.com/en-us/library/ms176061.aspx


کانکشن استرینگ رو براساس اینستنس خودتون بنویسید

دوستون Reza_Yarahmadi (http://barnamenevis.org/member.php?97318-Reza_Yarahmadi) یه نمونه براتون نوشتن تا جایی که بنده یادمه اینستنش سیستم شما


.\sqlexpress

بود پس بجای Local بنویسید

.\sqlexpress

از کد زیر استفاده کنید تا لیست دیتابیسهای جاری رو بدست بیارید ، اگه دیتابیستون تو لیست نبود اتچ کنید

public static List<string> GetDbNames(string serverConnectionString)
{
List<string> DatabaseList = new List<string>();
try
{
string query = @"sp_databases";
SqlConnection con = new SqlConnection(serverConnectionString);
SqlCommand cmd = new SqlCommand(query, con);
cmd.CommandType = CommandType.StoredProcedure;
if (con.State != ConnectionState.Open)
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
DatabaseList.Add(dr["Database_Name"].ToString());
}
dr.Close();
con.Close();
cmd.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return DatabaseList;
}


serverConnectionString هم برا سیستم شما با فرض Windows Authentication

میشه


@"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True";

موفق باشید.

Collector
دوشنبه 28 شهریور 1390, 01:04 صبح
این خطا را نشان میدهد لطفا پروژه را تصحیح کنید.


Format of the initialization string does not conform to specification starting at index 0.

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 01:20 صبح
دوست عزیز این دستور رو عوض نکنید

DatabaseList.Add(dr["Database_Name"].ToString());

قالبش همینه ، شما نباید بجای Database_Name نام دیتابیستون رو بذارید این خروجی sp_databases هست و به

همین صورته

برنامتون رو اصلاح کردم بررسی کنید اگه بازم موردی بود فعلا هستم

vistacali
دوشنبه 28 شهریور 1390, 09:47 صبح
سلام دوستان من یک مشکل جالب برخوردم دیگه راه حل هم به مغزم نمیکشه کمک کنید ممنون میشوم

من وقتی میام دیتابیس اس کیو ال را توی برنامه نویسی باز میکنم و اونو توی یک دیتا گرید ویو نمایش میدم دیگه اگر بخوام به دیتا بیس یک سطر اضاف کنم پیغام بهم میده که دیتا بیس باز هست فقط زمانی میتونم به دیتابیس حذف و اضاف و ویرایش کنم که توی دیتا گرید ویو اونو نمایش نداده باشم باید چکار کنم ممنون میشم راهنمایی کنید

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 09:53 صبح
سلام دوستان من یک مشکل جالب برخوردم دیگه راه حل هم به مغزم نمیکشه کمک کنید ممنون میشوم

من وقتی میام دیتابیس اس کیو ال را توی برنامه نویسی باز میکنم و اونو توی یک دیتا گرید ویو نمایش میدم دیگه اگر بخوام به دیتا بیس یک سطر اضاف کنم پیغام بهم میده که دیتا بیس باز هست فقط زمانی میتونم به دیتابیس حذف و اضاف و ویرایش کنم که توی دیتا گرید ویو اونو نمایش نداده باشم باید چکار کنم ممنون میشم راهنمایی کنید


دوست عزیز بهتر نبود بعد جستجو یه تاپیک میزدید، آخه این تاپیک و این سوال ؟

(از خاصیت ConnectionState) استفاده کنید و قبل از باز کردن یا بستن کانکشن وضعیت جاری رو چک کنید.

Reza_Yarahmadi
دوشنبه 28 شهریور 1390, 21:26 عصر
استورد پروسیجر sp_attach_db تو SQL SERVER های بالای 2000 دیگه ساپورت نمیشهبر اساس چه منبعی این حرف رو میزنید؟ در 2005 که بدون مشکل کار میکنه در حال حاضر به 2008 دسترسی ندارم ولی توی 2005 تست شده و بدون مشکل کار میکنه.

برنامه ضمیمه شد.

Esmail Solhkhah
دوشنبه 28 شهریور 1390, 22:55 عصر
بر اساس چه منبعی این حرف رو میزنید؟ در 2005 که بدون مشکل کار میکنه در حال حاضر به 2008 دسترسی ندارم ولی توی 2005 تست شده و بدون مشکل کار میکنه.

برا 2005
http://msdn.microsoft.com/en-us/library/ms179877%28v=sql.90%29.aspx

برا 2008
http://msdn.microsoft.com/en-us/library/ms179877.aspx


ولی توی 2005 تست شده و بدون مشکل کار میکنه

یه ستاپ درست کنید و SQL 2005 رو نصب کنید دیتابیستون رو با این استورد پروسیجر اتچ کنید

vistacali
دوشنبه 28 شهریور 1390, 23:04 عصر
دوست عزیز بهتر نبود بعد جستجو یه تاپیک میزدید، آخه این تاپیک و این سوال ؟

(از خاصیت ConnectionState) استفاده کنید و قبل از باز کردن یا بستن کانکشن وضعیت جاری رو چک کنید.


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

eligol
سه شنبه 29 شهریور 1390, 08:33 صبح
دوست عزیز بهتر نبود بعد جستجو یه تاپیک میزدید، آخه این تاپیک و این سوال ؟

(از خاصیت ConnectionState) استفاده کنید و قبل از باز کردن یا بستن کانکشن وضعیت جاری رو چک کنید.

سلام من دقیقا همین مشکل را دارم لطفا راهنماییم کنید باید چه کار کنم؟