PDA

View Full Version : بروز خطای An attempt to attach an auto-named database هنگام اجرای برنامه



pure_love
یک شنبه 03 اسفند 1393, 22:02 عصر
سلام بچه ها
من واسه یه آموزشگاه یه برنامه نوشتم همه جاش هم کاملا درست کار میکنه و به دیتابیس سی شارپ هم وصله و در محیط سی شارپ مشکلی نداره.
حالا که فایل setup واسش ساختم:
همه قسمت هاش(ثبت کاربر،ویرایش،حذف و....)کار میکنه فقط قسمت پشتیبانی(بک آپ ، ریستور ، گزارش گیری)کار نمیکنه و این پیغام میده:

http://s5.picofile.com/file/8172752084/10.jpg
این کد های بک آپ :


SaveFileDialog savefiledialog = new SaveFileDialog();
savefiledialog.FileName = DateTime.Now.ToString("ddmmyyyy_hhmmss");
savefiledialog.Filter = "BackupFile(*.Bak)|*.Bak";
if (savefiledialog.ShowDialog() == DialogResult.OK)
{
/*try
{*/
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\giutar\meh ran_tarahi\C#\Persion Engilish\parsian\parsian\bin\Debug\persionsql.mdf; Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string quary = "BACKUP DATABASE [" + Application.StartupPath + @"\persionsql.mdf] TO DISK='" + savefiledialog.FileName + "'";
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = quary;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
MessageBox.Show("اطلاعات شما با موفقیت پشتیبان گیری شد");
/*}
catch { MessageBox.Show("خطا"); }*/


کد های ریستور :


OpenFileDialog openfiledialog = new OpenFileDialog();
openfiledialog.Filter = "BackupFile(*.Bak)|*.Bak";
if (openfiledialog.ShowDialog() == DialogResult.OK)
{
/*try
{*/
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\giutar\meh ran_tarahi\C#\Persion Engilish\parsian\parsian\bin\Debug\persionsql.mdf; Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string quary = "ALTER DATABASE [" + Application.StartupPath + @"\persionsql.mdf] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + Application.StartupPath + @"\persionsql.mdf] FROM DISK = '" + openfiledialog.FileName + "';ALTER DATABASE [" + Application.StartupPath + @"\persionsql.mdf] SET MULTI_USER;";
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = quary;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
MessageBox.Show("اطلاعات شما با موفقیت بروز رسانی شد");
/*}
catch { MessageBox.Show("خطا در ثبت"); }*/
}
SqlConnection con1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\giutar\meh ran_tarahi\C#\Persion Engilish\parsian\parsian\bin\Debug\persionsql.mdf; Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter("select * from insertstd", con1);
DataTable dt = new DataTable();
con1.Open();
da.Fill(dt);
con1.Close();
dataGridView1.DataSource = dt;



کد گزارش گیری هم که چیز خاصی نداره یدونه report1 اضافه میکنی و بقیه کارا....!

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

pure_love
دوشنبه 04 اسفند 1393, 07:54 صبح
بچه ها کسی نبود جواب بده:ناراحت::ناراحت:

SabaSabouhi
دوشنبه 04 اسفند 1393, 08:54 صبح
بچه ها کسی نبود جواب بده:ناراحت::ناراحت:

سلام
مسیر فایل رو عوض کن، program files جزو مسیرهای حمایت شده در ویندوزهای 7 به بالا هست و مشکل دسترسی خواهی داشت.
از مسیر زیر استفاده کن:


var applicationRoot = Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData );
var applicationFolder = Path.Combine( applicationRoot, "MyApplicaion" );

مسیرش هم معمولاً می‌شه c:\ProgramData که نام برنامه‌ی خودتون رو بهش اضافه کنین می‌شه c:\ProgramData\MyApplicaion
به همین راحتی

صبا صبوحی

pure_love
دوشنبه 04 اسفند 1393, 11:42 صبح
سلام
مسیر فایل رو عوض کن، program files جزو مسیرهای حمایت شده در ویندوزهای 7 به بالا هست و مشکل دسترسی خواهی داشت.
از مسیر زیر استفاده کن:


var applicationRoot = Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData );
var applicationFolder = Path.Combine( applicationRoot, "MyApplicaion" );

مسیرش هم معمولاً می‌شه c:\ProgramData که نام برنامه‌ی خودتون رو بهش اضافه کنین می‌شه c:\ProgramData\MyApplicaion
به همین راحتی

صبا صبوحی

ممنونم.
اگه میشه بیشتر توضیح بده ، مسیر فایل کجارو تغییر بدم؟
این 2 خط کد رو کجا بنویسم

SabaSabouhi
دوشنبه 04 اسفند 1393, 12:51 عصر
ممنونم.
اگه میشه بیشتر توضیح بده ، مسیر فایل کجارو تغییر بدم؟
این 2 خط کد رو کجا بنویسم

سلام
تو نصب فایل دیتابیس رو تو مسیر "c:\programData\persian academy" کپی کن یا بساز ( نمی‌دونم دیتابیس رو می‌سازی یا attach می‌کنی )
و هنگام ساخت connectionString برای این مسیر فایل رو بدی، از اون دو خط کد استفاده کن.
البته این مسیر برای ویندوز XP می‌شه توی Document and Settings\All Users

صبا صبوحی