PDA

View Full Version : سوال پیرامون کانکشن استرینگ



jd.mn98
پنج شنبه 23 بهمن 1393, 23:20 عصر
سلام دوستان
آقا من هرچی گشتم و سرچ زدم آخر به جواب سوالام درباره کانکشن استرینگ نرسیدم
من توی برنامم از کانکشن استرینگ توی انی تصویر استفاده میکنم.
برای اولین بار که این کانکشن رو ساختم و برنامه رو اجرا کردم دیتابیس اتچ نشد و برنامه با ارور مواجه شد. ولی وقتی دستی دیتابیس رو اتچ کردم و برنامه رو اجرا کردم دیگه به خطایی برنخوردم. و بعد دیتابیس رو دیتچ کردم که ببینم آیا میشه از طریق برنامه دیتابیس اتچ بشه و ارور نده. که همین طور هم شد و برنامه اجرا شد و ارور نداد. حالا سوال من اینه که اگه من این برنامه رو ببرم رو سیستم مقصد نصب کنم برای دفعه امکان داره که ارور بده و برنامه اجرا نشه. حالا چی کار کنم که این مشکل پیش نیاد؟؟ اگه تغییراتی روی کانکشن اترینگ لازمه بدم و یا روی دیتابیس لطفا راهنمایی کنید.
با تشکر
128415

SabaSabouhi
جمعه 24 بهمن 1393, 00:58 صبح
سلام
این ConnectionString شما رو به دیتابیس Attach شده وصل می‌کنه، برای Attach کردن باید به دیتابیس master وصل بشی و فرمان Attach کردن رو اونجا اجرا کنی.

صبا صبوحی

shahab2025
جمعه 24 بهمن 1393, 08:24 صبح
سلام
این ConnectionString شما رو به دیتابیس Attach شده وصل می‌کنه، برای Attach کردن باید به دیتابیس master وصل بشی و فرمان Attach کردن رو اونجا اجرا کنی.

صبا صبوحی

میشه یک نمونه مثال بزنید

mojtabamalaekeh
جمعه 24 بهمن 1393, 09:14 صبح
توی این تابع نام سرور و نام دیتابیس بامقادیر ثابت .\\SQLExpress و Your_Database_Name تعریف شدن اما فولدر حاوی فایل های دیتابیس، به صورت پارامتری دریافت شده.
شما کد رو یک دور بخون بعد هرجور خواستی توی تابع، تغییرات ایجاد کن.


private void Attach(string DatabaseFolder)
{
string _DatabaseName = "Your_Database_Name", _Server = ".\\SQLExpress";
string MDFPath = Path.Combine(DatabaseFolder, _DatabaseName + ".mdf");
string LDFPath = Path.Combine(DatabaseFolder, _DatabaseName + "_log.ldf");
SqlConnection cn = null;
try
{
cn = new SqlConnection(string.Format(@"Server = {0}; Integrated security = SSPI; database = master", _Server));
cn.Open();
using (SqlCommand cmd = new SqlCommand(string.Format("CREATE DATABASE [{0}] ON (FILENAME = '{1}'), (FILENAME = '{2}') FOR ATTACH", _DatabaseName, MDFPath, LDFPath), cn))
if (cn.State == ConnectionState.Open) cmd.ExecuteNonQuery();
}
catch
{
}
finally
{
if (cn != null) cn.Dispose();
}
}

راحیل مهربان
جمعه 24 بهمن 1393, 16:35 عصر
توی این تابع نام سرور و نام دیتابیس بامقادیر ثابت .\\SQLExpress و Your_Database_Name تعریف شدن اما فولدر حاوی فایل های دیتابیس، به صورت پارامتری دریافت شده.
شما کد رو یک دور بخون بعد هرجور خواستی توی تابع، تغییرات ایجاد کن.


private void Attach(string DatabaseFolder)
{
string _DatabaseName = "Your_Database_Name", _Server = ".\\SQLExpress";
string MDFPath = Path.Combine(DatabaseFolder, _DatabaseName + ".mdf");
string LDFPath = Path.Combine(DatabaseFolder, _DatabaseName + "_log.ldf");
SqlConnection cn = null;
try
{
cn = new SqlConnection(string.Format(@"Server = {0}; Integrated security = SSPI; database = master", _Server));
cn.Open();
using (SqlCommand cmd = new SqlCommand(string.Format("CREATE DATABASE [{0}] ON (FILENAME = '{1}'), (FILENAME = '{2}') FOR ATTACH", _DatabaseName, MDFPath, LDFPath), cn))
if (cn.State == ConnectionState.Open) cmd.ExecuteNonQuery();
}
catch
{
}
finally
{
if (cn != null) cn.Dispose();
}
}


سلام
الان این تابع رو کجا باید نوشت؟
منظورم اینه که با هربار اجرای برنامه که نباید بانکمون ایجاد شه.

mojtabamalaekeh
جمعه 24 بهمن 1393, 17:18 عصر
اگه با خود ویژوال استادیو ستاپ درست می کنید، میتونید با CustomAction به Setup اضافش کنید تا فقط موقع نصب اجرا بشه.

میتونید هم در هر بار اجرای برنامه کنترل کنید که: «اگر دیتابیس روی سرور نبود اما فایل هاش توی فولدر صحیح موجود بودن» تابع اجرا بشه.

jd.mn98
جمعه 24 بهمن 1393, 17:25 عصر
سلام
این ConnectionString شما رو به دیتابیس Attach شده وصل می‌کنه، برای Attach کردن باید به دیتابیس master وصل بشی و فرمان Attach کردن رو اونجا اجرا کنی.

صبا صبوحی

اگه اینطوره پس AttachDbFileName چیکار میکنه؟
در ثانی من اکثر پروژ] هایی رو که دیدم از این طریق که گفتید به بانک متصل نمیشن.
اگر اینطور باشه باید برای هر بار اجرای برنامه این کد رو اجرا کنیم

راحیل مهربان
جمعه 24 بهمن 1393, 18:07 عصر
یه سوال دیگه هم دارم
من برای برنامم در ابتدا در Connection String مسیر ثابت بانک رو دادم. اما بعدش به خاطر Setup گرفتن (که با خود VS2010 انجام دادم) اومدم از |DataDirectory| استفاده کردم. منتهی تو همون اجرای برنامه هم خطای Invalid AttachdbFilename میده. تو Setup گرفتن هم موندم


میشه در مورد Path هم توضیح بدین؟ چیه و چطور میشه تو یه کلاس استفاده کرد؟

mojtabamalaekeh
جمعه 24 بهمن 1393, 22:45 عصر
اگه اینطوره پس AttachDbFileName چیکار میکنه؟
در ثانی من اکثر پروژ] هایی رو که دیدم از این طریق که گفتید به بانک متصل نمیشن.
اگر اینطور باشه باید برای هر بار اجرای برنامه این کد رو اجرا کنیم
در مورد AttachDbFileName و DataDirectory جستجو کردم ولی آخرش نفهمیدم دقیقا چی هستن. تا حالا هم هیچوقت ازش استفاده نکردم توی هیچ پروژه ای.
اگه کسی بگه دقیقا کاربردش چیه ممنونش میشم.


یه سوال دیگه هم دارم
من برای برنامم در ابتدا در Connection String مسیر ثابت بانک رو دادم. اما بعدش به خاطر Setup گرفتن (که با خود VS2010 انجام دادم) اومدم از |DataDirectory| استفاده کردم. منتهی تو همون اجرای برنامه هم خطای Invalid AttachdbFilename میده. تو Setup گرفتن هم موندم


میشه در مورد Path هم توضیح بدین؟ چیه و چطور میشه تو یه کلاس استفاده کرد؟
DataDirectory که گفتم نمیدونم چیه
توی Setup اگه مشکل دارین پروژه ای که ضمیمه کردم رو ببینید و حتما فایل متنی داخل فایل فشرده رو بخونید.
کلاس Path توابعی برای کار با رشته هایی که حاوی اسم و مسیر فایل و فولدر هستند در اختیارمون میذاره.
با using System.IO میتونید از Path استفاده کنید.

jd.mn98
یک شنبه 02 فروردین 1394, 19:33 عصر
سلام دو.ستان
من برنامم رو روی یه سیستم دیگهاجرا کردم ولی ارور داد و بالا نیومد.
وقتی توی کانکشن استریگ قسمت initial catalog رو پاک کردم برنامه درست اجرا شد و بالا اومد. می خوام بدونم مشکل از کجایه؟؟ چطور میشه رفعش کرد؟

jd.mn98
دوشنبه 03 فروردین 1394, 11:34 صبح
دوستان لطفا راهنمایی کنید!