-
یه مشکل در دیتابیس
سلام.من دارم تو سی شارپ یه برنامه می نویسم که توش از دیتابیس خود ویژوال استودیو استفاده کردم. دیتابیس رو هم از طریق کدنویسی به برنامه وصل کردم.( از طریق connection string ).
حالا برنامه روی هر سیستمی که میره، آدرس connection string برنامه عوض میشه.( به خاطر اسم درایو و محل نصب ). چکار کنم که coonection string عوض نشه؟
ممنون.
-
سلام
شما باید دیتابیس رو در محل اجرای برنامه قرار بدین...
و محل اجرای برنامه رو می تونی اینطوری به دست بیاری :
کد:
System.Environment.CurrentDirectory;
موفق باشید.
-
سلام.
میشه یه کم بیشتر توضیح بدین؟
مثلا یه خط کد بنویسید.
ممنون.
-
آیا دیتابیس رو attach می کنید؟؟!
-
بله. فقط می خوام رو هر سیستم دیگه ای که اجرا میشه آدرس بنکش رو خودش داشته باشه. یعنی یه آدرس ثابت نباشه.
نسبی باشه.
ممنون.
-
سلام
خوب اینکه دیگه کاری نداره شما باید دو تا فایل دیتابیس رو در کنار exe برنامه قرار بدین و نحوه ی پیدا کردن پوشه ی exe رو هم که گفتم نهایتا این کد می تونه شما رو راهنمایی کنه :
کد:
string DatabaseName = "DbName";
string MdfPath = string.Format(@"{0}\{1}.mdf", Environment.CurrentDirectory,DatabaseName);
string LdfPath = string.Format(@"{0}\{1}_log.ldf", Environment.CurrentDirectory,DatabaseName);
string AttachString = string.Format("EXEC sp_attach_db @dbname = N'{0}'," +
"@filename1 = N'{1}',@filename2 = N'{2}';", DatabaseName, MdfPath, LdfPath);
در کد بالا به شرط موجود بودن فایلهای دیتابیس در کنار exe شما می تونید تنها با دادن نام دیتابیستان به DatabaseName و قرار دادن AttachString در رشته ی فرمان همون کاری که گفتید رو انجام بدید.
موفق باشید.
-
سلام.
میشه رو کد پایین یه مثال بنویسید؟
کدی که من نوشتم اینه:
SqlConnection con = newSqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"I:\\proje2 \\CN-CALC\\CN-CALC\\Database1.mdf\";Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand cmd1 = newSqlCommand("update fi set fi='" + textBox5.Text + "'", con);
cmd1.Connection.Open();
SqlDataAdapter adp = newSqlDataAdapter();
adp.SelectCommand = cmd1;
DataTable dt = newDataTable();
adp.Fill(dt);
cmd1.Connection.Dispose();
ممنون.
-
دوست عزیز شما از کد زیر استفاده کردید؟؟
کد:
Environment.CurrentDirectory
کار متد string.Format در کد قبلی رو فهمیدید؟؟
نه!!!
لطفا کمی خودتان فکر کنید و...
-
سلام. من از عباراتی که تو کد هاتون ازشون استفاده کردین، سر در نیاوردم. عباراتی مثل :
EXEC sp_attach_db @dbname = N'{0}'," +"@filename1 = N'{1}',@filename2 = N'{2}'
و
@"{0}\{1}.mdf"
و
@"{0}\{1}_log.ldf
میشه یه کم راجع بهشون توضیح بدین؟
ممنون میشم اگه توضیحات کامل بدین چون من خیلی خیلی خیلی خیلی ... به این کد احتیاج دارم.
ممنون.
-
سلام
من ان کدها رو گذاشتم تا نحوه ی بدست آوردن مکان دیتابیس رو به طور دینامیک بهتون نشون بدم.
شما می توانستیت به همان شکلی که خودتان attach رو انجام می دادید کد رو تغییر بدین.
اما بهتر است برای attach کردن از sp_attach_db استفاده کنید که کدش رو گذاشتم.
و اما کد شما اگه به اینصورت تغییر کنه مشکلش حل میشه->
کد:
string MdfPath = Environment.CurrentDirectory + @"\DatabaseName.mdf";
string ConnectionString =
string.Format(@"Data Source = .\SQLEXPRESS;AttachDBFileName={0};" +
"Integrated Security = SSPI;", MdfPath);
System.Data.SqlClient.SqlConnection connection =
new System.Data.SqlClient.SqlConnection(ConnectionString);
توجه داشته باشید که در کد بالا باید فایلهای دیتابیس برنامه در محل exe برنامه قرار بگیرند.
و DatabaseName رو به نام دیتابیس تغییر بدید.
موفق باشید.