PDA

View Full Version : سوال: مشکل backup و Restore فقط بعد از نصب برنامه!(هنگام دیباگ بدون مشکل)



zayens
شنبه 04 دی 1389, 14:44 عصر
وقتی هنگام Debug برنامه از دیتابیس backup و Restore میگیرم هیچ مشکلی ندارم و تمام
کار با موفقیت انجام میشه.
اما وقتی برای برنامه setup درست میکنم یا به عبارتی publish میکنم، بعد از نصب برنامه نه Backup میگیره و نه
Restore میکنه.
کدهایی که استفاده کردم را در زیر میذارم

راستی من دیتابیسم را به برنامه اتچ(Attach) کردم
این هم کانکشن استرینگ:

Mycn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DataBase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");این هم کدبکاپ:

cmd.CommandText = @"backup database [" + Application.StartupPath + "\\DataBase.mdf] to disk =N'"
+ PATH + "' with init, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";و این هم کد ریستور:

cmd.CommandText = "ALTER DATABASE [" + Application.StartupPath + "\\DataBase.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE"
+ " ALTER DATABASE [" + Application.StartupPath + "\\DataBase.mdf] SET MULTI_USER"
+ " RESTORE DATABASE [" + Application.StartupPath + "\\DataBase.mdf] FROM DISK =N'" + mypath + "' WITH RECOVERY,REPLACE";یه بار دیگه یادآوری کنم که کدها موقع Debug مشکلی ندارن و وقتی برنامه را برای مشتری نصب میکنیم اجرا نمیشن

hossin.esm
شنبه 04 دی 1389, 16:44 عصر
تو لینک زیر یک مثال گذاشتم (پست شماره 624)
http://barnamenevis.org/showthread.php?64210-نمونه-برنامه-های-کوچک-و-مفيد-در-سي-شارپ/page63
امیدوارم مشکلت حل بشه

zayens
چهارشنبه 08 دی 1389, 12:58 عصر
از شما بسیار ممنونم

ولی این کد هم هنگام ریستور ارور زیر را میده:
A transport-level error has occurred
when sending the request to
the server. (provider: Named Pipes
Provider, error: 0 - No process is
on the other end of the pipe.)

من با تغییرات بسیار کم از کد شما استفاده کردم
آیا چیز دیگه ای لازمه:


من کد شما را در کلاسی به نام بک آپ گذاشتم و از اونجا فراخوانی میکنم
این هم بخشی از کلاس و کد شما:


class ClassBackUp
{

public DataView Dvbak;
MyDbRun DbRun;
SqlCommand cmd;

public void MakeBackUpFiles(string Path)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\DBAMLAK1.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
string dbname = cmd.Connection.Database;//'گرفتن نام کامل دیتابیس
cmd.Connection.Close();

SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + Path + "' ";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("پشتیبان گیری از اطلاعات با موفقیت انجام شد");
}

public void MakeRestoreFile(string Path)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\DBAMLAK1.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
string dbname = cmd.Connection.Database;
cmd.Connection.Close();

string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;USE master; RESTORE DATABASE [" + dbname + "] FROM DISK = '" + Path + "' WITH RECOVERY,REPLACE ;ALTER DATABASE [" + dbname + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();


MessageBox.Show("بازیابی اطلاعات با موفقیت انجام شد");

}

zayens
چهارشنبه 08 دی 1389, 16:40 عصر
کسی نمیدونه؟

zayens
چهارشنبه 08 دی 1389, 20:41 عصر
بهتر بود قبل از این سوال یه ذره سرچ می کردم!
جوابشو پیدا کردم.
علت ارور زیر اینه که کد
System.Data.SqlClient.SqlConnection.ClearAllPools( ); را بعد از ریستور کردن باید میذاشتم

ارور:A transport-level error has occurred
when sending the request to
the server. (provider: Named Pipes
Provider, error: 0 - No process is
on the other end of the pipe.)

abbas.oveissi
چهارشنبه 08 دی 1389, 21:52 عصر
بهتر بود قبل از این سوال یه ذره سرچ می کردم!
جوابشو پیدا کردم.
علت ارور زیر اینه که کد
System.Data.SqlClient.SqlConnection.ClearAllPools( ); را بعد از ریستور کردن باید میذاشتم

ارور:A transport-level error has occurred
when sending the request to
the server. (provider: Named Pipes
Provider, error: 0 - No process is
on the other end of the pipe.)

اشکال نداره،من یه چیز جدید یاد گرفتم :لبخند: