PDA

View Full Version : سوال: مشکل در اتصال به دیتابیس



majid821
چهارشنبه 21 دی 1390, 02:06 صبح
سلام دوستان.سؤالم شاید ابتدایی به نظر بیاد ولی قضیه از این قراره که من یه برنامه نسبتا ساده بانک اطلاعاتی با سی شارپ نوشتم.دیتابیسم رو با sql server 2005 ایجاد کردم و بنابراین توی کانکشن استرینگ سرور رو برابر localhast قرار دادم.برنامه اجرا میشه و درست کار میکنه.حالا میخام فایل دیتابیس رو که یه فایل mdf. هست به برنامه attach کنم تا بتونم کل پروژه رو رایت کنم و روی سیستم دیگه اجرا کنم.خب حتما میگین باید اون فایل رو توی فولدر پروژه کپی و فرم کانکشن استرینگ رو عوض کنم.من این کار رو کردم اما برنامه خطا میگیره و نمیتونه به دیتابیس کانکت بشه.من با VS2010 کار میکنم.لطفا بهم بگین چطور میشه فایل دیتابیس رو به برنامه وصل کرد؟

amin_sltny
چهارشنبه 21 دی 1390, 08:46 صبح
سلام.من به جای اینکه دیتا بیسا را attach کنم کد نوشتم تا تو یه سیستم دیگه خودش یه بانک اطلاعاتی جدید بسازه.فکر میکنم این کار بهتر باشه

Hybrid
چهارشنبه 21 دی 1390, 09:15 صبح
سلام دوستان.سؤالم شاید ابتدایی به نظر بیاد ولی قضیه از این قراره که من یه برنامه نسبتا ساده بانک اطلاعاتی با سی شارپ نوشتم.دیتابیسم رو با sql server 2005 ایجاد کردم و بنابراین توی کانکشن استرینگ سرور رو برابر localhast قرار دادم.برنامه اجرا میشه و درست کار میکنه.حالا میخام فایل دیتابیس رو که یه فایل mdf. هست به برنامه attach کنم تا بتونم کل پروژه رو رایت کنم و روی سیستم دیگه اجرا کنم.خب حتما میگین باید اون فایل رو توی فولدر پروژه کپی و فرم کانکشن استرینگ رو عوض کنم.من این کار رو کردم اما برنامه خطا میگیره و نمیتونه به دیتابیس کانکت بشه.من با VS2010 کار میکنم.لطفا بهم بگین چطور میشه فایل دیتابیس رو به برنامه وصل کرد؟
سلام ، خیلی خوب میشد CS رو مینوشتین ... کانکشن استرینگ رو بنویسین تا دوستان بهتر نظر بدن..

موفق باشید./

majid821
چهارشنبه 21 دی 1390, 13:19 عصر
سلام.من به جای اینکه دیتا بیسا را attach کنم کد نوشتم تا تو یه سیستم دیگه خودش یه بانک اطلاعاتی جدید بسازه.فکر میکنم این کار بهتر باشه

خب اشکال اصلی اینکار اینه که وقتی برنامه رو تو سیستم دیگه اجرا میکنی داده هایی که قبلا وارد کردی از بین میره.ولی من میخوام رکوردهایی رو که قبلا ذخیره کردم داشته باشم

majid821
چهارشنبه 21 دی 1390, 13:26 عصر
سلام ، خیلی خوب میشد CS رو مینوشتین ... کانکشن استرینگ رو بنویسین تا دوستان بهتر نظر بدن..

موفق باشید./

خب کانکشن استرینگی که من استفاده کردم اول به این فرم بود :

Server=Localhost;Database=Nokia;Integrated Security=True;

همه چیز درست بود و برنامه اجرا میشه

بعداز اینکه فایل mdf. رو تو فولدر bin/debug کپی کزدم کانکشن استرینگ رو به فرم زیر تغییر دادم

Server=.\SQLExpress;AttachDbFilename=|DataDirector y|mydbfile.mdf; Database=nokia;Trusted_Connection=Yes;

AliSaeedi_v
چهارشنبه 21 دی 1390, 19:22 عصر
سلام
این راهی که دستمون گفتن اصلا خوب نیست
من کد attachکردن رو میذارم
موفق باشین

public void attach()
{
string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=localhost";

string cm = @"EXEC sp_attach_db @dbname = '"+dbname+"',@filename1='"+databasefile+"',@filename2='"+logfile+"'";
SqlConnection con = new SqlConnection(cs);
try
{
con.Open();
SqlCommand cmd = new SqlCommand(cm, con);
if (exist())
return;
cmd.ExecuteReader();
}
catch
{
Error += "خطا در اضافه کردن بانک اطلاعاتی به برنامه پایگاه داده";
}
finally
{
con.Close();
}

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

ahmadreza517
چهارشنبه 21 دی 1390, 20:31 عصر
سلام
این راهی که دستمون گفتن اصلا خوب نیست
من کد attachکردن رو میذارم
موفق باشین

public void attach()
{
string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=localhost";

string cm = @"EXEC sp_attach_db @dbname = '"+dbname+"',@filename1='"+databasefile+"',@filename2='"+logfile+"'";
SqlConnection con = new SqlConnection(cs);
try
{
con.Open();
SqlCommand cmd = new SqlCommand(cm, con);
if (exist())
return;
cmd.ExecuteReader();
}
catch
{
Error += "خطا در اضافه کردن بانک اطلاعاتی به برنامه پایگاه داده";
}
finally
{
con.Close();
}

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


می شه درباره کدتون توضیح بدید

majid821
چهارشنبه 21 دی 1390, 21:08 عصر
سلام
این راهی که دستمون گفتن اصلا خوب نیست
من کد attachکردن رو میذارم
موفق باشین

public void attach()
{
string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=localhost";

string cm = @"EXEC sp_attach_db @dbname = '"+dbname+"',@filename1='"+databasefile+"',@filename2='"+logfile+"'";
SqlConnection con = new SqlConnection(cs);
try
{
con.Open();
SqlCommand cmd = new SqlCommand(cm, con);
if (exist())
return;
cmd.ExecuteReader();
}
catch
{
Error += "خطا در اضافه کردن بانک اطلاعاتی به برنامه پایگاه داده";
}
finally
{
con.Close();
}

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

علی جان ممنونم.این کدی که نوشتی یه تابعه درست؟خب احتمالا این تابع باید موقع لود شدن برنامه فراخوانی بشه درسته؟ سؤال دیگه ای که به ذهنم میاد اینه که توی cm به جای dbname و databasefilename کدوم مقادیر قرار میگیره؟یعنی اسم دیتابیس جای کدومشون میشینه؟

majid821
چهارشنبه 21 دی 1390, 21:21 عصر
دوستان یه بار دیگه توضیح بدم. این برنامه یه پروژه درسیه.قراره اونو رایت کنم وبه استاد بدم.استاد ممکنه تو سیستم خودش SQL داشته باشه یا نداشته باشه(البته فرض بر اینه که SQL Server نصبه).در واقع میخام فایل دیتابیس جزئی از پروژه باشه.مخصوصا اینکه واسه گزارشگیری از ReportViewer خود ویژوال 2010 استفاده میکنم و تو این مورد برام مشکل جدی بوجود اومده. فکر میکنم کار سختی نباشه ولی خب دیگه من تازه کارم.

AliSaeedi_v
پنج شنبه 22 دی 1390, 11:39 صبح
سلام
به جای dbname نامی که قراره بانک با اون اسم در sql ذخیره بشه قرار میگیره ودر databasefilename نام فایل پایگاه داده که روی سیستم ذخیره کردین قرار میگیره.
بله این یه تابع است و همونطور که گفتین میتونه توی لود شدن قرار بگیره ویا توی یه دکمه!!

AliSaeedi_v
پنج شنبه 22 دی 1390, 11:43 صبح
می شه درباره کدتون توضیح بدید
سلام این کد اسم بانک و فایل لوک اونو میگیره و اگه وجود نداشت توی sql وارد میکنه
البته من متد exist رو فراموش کردم بذارم که الان میذارم.
public Boolean exist()
{
string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
string cm = "select name from master.dbo.sysdatabases where name='"+this.DBName+"'";
SqlConnection con = new SqlConnection(cs);
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
try
{
con.Open();
SqlCommand cmd = new SqlCommand(cm, con);
da.SelectCommand = cmd;
da.Fill(dt);

}
catch
{
Error += "خطا در ارتباط با برنامه پایگاه داده";

}
finally
{
con.Close();
}
if (dt.Rows.Count == 1)
return true;
return false;
}