PDA

View Full Version : سوال: قبلا با این کد نسخه پشتیبان (Backup) میگرفتم ولی الان خطا میده ؟



Mosafers
جمعه 31 شهریور 1396, 12:08 عصر
سلام وقت بخیر من در نسخه های قبلی نرم افزار توسط کد زیر بک آپ میگرفتم که الان خطا بهم میده؟
خطا را هم پیوست کردم میتونید ببینید.
با تشکر

PerViewEntities db = new PerViewEntities();
db.Dispose();

SqlCommand oCommand = null;
SqlConnection oConnection = null;
try
{
string ConectionString =
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\PerView.mdf;Integrated Security=True;User Instance=True";
string Command = @"backup database [" + Application.StartupPath + "\\PerView.mdf] to disk ='" +strFileName + "' with init,stats=10";


this.Cursor = Cursors.WaitCursor;


oConnection = new SqlConnection(ConectionString);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();


oCommand = new SqlCommand(Command, oConnection);
oCommand.ExecuteNonQuery();


this.Cursor = Cursors.Default;
MessageBoxFarsi.Show("از اطلاعات بانک نسخه پشتیبانی تهیه شد.");
}
catch (Exception ex)
{
MessageBoxFarsi.Show("خطا :" + ex.Message);
}
finally
{
oConnection.Close();
//oCommand.Parameters.Clear();
oCommand.Dispose();
}

danialafshari
جمعه 31 شهریور 1396, 16:25 عصر
با سلام
مطمئنید روی سیستمتون sql express نصب هست و نسخه ی آن قدیمی تر از بانک نیست؟

این کد را تست کنید

private void btnBackup_Click(object sender, EventArgs e)
{
string bname = DateTime.Now.ToString("yyyyMMddHHmm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\lcdb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] 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 = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات\nلطفا مجدد تلاش كنيد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

Mahmoud.Afrad
شنبه 01 مهر 1396, 04:05 صبح
به طور کلی ، اگر امکان null بودن شئ‌ای که میخواهید متد را از آن فراخوانی کنید هست، قبل از فراخوانی متدهای آن شئ(در اینجا Dispose) باید چک کنید شئ null نباشد. (در این مثال ممکن هست قبل از ایجاد SqlCommand (خط 21) برنامه دچار استثناء شود و SqlCommand همچنان null باشد.)