PDA

View Full Version : سوال: Exception ایجاد شده پس از Restore



Glx.Mzf
پنج شنبه 01 مهر 1389, 19:29 عصر
سلام دوستان
از دیتا بیسم Backup می گیرم بعدشم Restore می کنم
تا اینجا مشکلی نیست!
وقتی می خوام با بانکم کار کنم این Exception رو میده:
System.Data.SqlClient.SqlException was unhandled
Message="A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)"
Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=20
LineNumber=0
Number=233
Server=".\\sqlexpress"
State=0
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.WriteSn i()
at System.Data.SqlClient.TdsParserStateObject.WritePa cket(Byte flushMode)
at System.Data.SqlClient.TdsParserStateObject.Execute Flush()
at System.Data.SqlClient.TdsParser.TdsExecuteSQLBatch (String text, Int32 timeout, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(Com mandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataRead er(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbComman d.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(Data Set dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at TelephoneBook.TelBook.txtSearch_Click(Object sender, EventArgs e) in E:\New TelephoneBook\TelephoneBook\TelBook.cs:line 355
at System.Windows.Forms.Control.OnTextChanged(EventAr gs e)
at System.Windows.Forms.TextBoxBase.OnTextChanged(Eve ntArgs e)
at System.Windows.Forms.TextBoxBase.WmReflectCommand( Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.SendMessa ge(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.Control.ReflectMessageInterna l(IntPtr hWnd, Message& m)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
at System.Windows.Forms.ContainerControl.WndProc(Mess age& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.CallWindo wProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.NativeWindow.DefWndProc(Messa ge& m)
at System.Windows.Forms.Control.DefWndProc(Message& m)
at System.Windows.Forms.Control.WmKeyChar(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at TelephoneBook.Program.Main() in E:\New TelephoneBook\TelephoneBook\Program.cs:line 20
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
at System.Runtime.Hosting.ManifestRunner.ExecuteAsAss embly()
at System.Runtime.Hosting.ApplicationActivator.Create Instance(ActivationContext activationContext, String[] activationCustomData)
at System.Runtime.Hosting.ApplicationActivator.Create Instance(ActivationContext activationContext)
at System.Activator.CreateInstance(ActivationContext activationContext)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssemblyDebugInZone()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:


این هم کدهای Backup و Restore


privatevoid button1_Click_2(object sender, EventArgs e)
{
try
{
SaveFileDialog saveFileDialog = newSaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup";
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = "C:\\";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
SqlCommand sqlCommand = newSqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "BACKUP DATABASE Montazeri_AbbasAbad TO DISK = @Destination";
sqlCommand.Parameters.Add("@Destination", SqlDbType.VarChar);
sqlCommand.Parameters["@Destination"].Value = saveFileDialog.FileName;
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
MessageBox.Show(" ");
}
}
catch (Exception)
{
MessageBox.Show(" ");
}
finally
{
sqlConnection.Close();
}

}





privatevoid button3_Click_2(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = newOpenFileDialog();
openFileDialog1.ShowDialog();
if ((openFileDialog1.FileName != "") && (openFileDialog1.FileName != "openFileDialog1"))
{
try
{
string filename = openFileDialog1.FileName;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "ALTER DATABASE montazeri_AbbasAbad SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;"
+ " RESTORE DATABASE montazeri_AbbasAbad FROM DISK =N'" + filename + "'";
sqlCommand.Connection = sqlConnection;
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
MessageBox.Show(" ");
}
catch
{
MessageBox.Show(" ");
}
finally
{
sqlConnection.Close();
}
}
}


اینو بگم اطلاعات درست بازیابی میشن
اگه دقیقا پس از بازگردانی اطلاعات برنامه رو reStart کنم مشکلی پیش نمی یاد

لطفا راهنماییم کنید

بهزادصادقی
پنج شنبه 01 مهر 1389, 20:25 عصر
یک transport level exception معمولا این معنی را دارد که شما connection خود به SQL Server را از دست داده اید. اگر connection اولیه شما به همان دیتابیسی است که دارید آن را restore می کنید، شاید بعد از پایان فرایند restore، چون آن دیبا بیس در حقیقت از اول ساخته شده است، می شود گفت دیتابیسی که شما بهش یک connection داشتید از بین رفته و حالا یک دیتابیس جدید با همان نام به جای آن به وچود آمده. در نتیجه احتمال دارد که SQL Server آن connection اولیه را به خاطر از بین رفتن دیتابیسش غیر فعال می کند. اگر این احتمالات من درست باشند، احتمالا راه حل مسئله این است که درست پس از پایان عملیات restore، شما connection خود را حذف کرده و دوباره آن را به وجود بیاورید. (منظورم متغیر sqlConnction شما می باشد.)

Glx.Mzf
پنج شنبه 01 مهر 1389, 21:44 عصر
دستت درد نکنه برا جواب
sqlConnection رو جدید کردم ولی فایده نداره،همون خطا رو میده!

بهزادصادقی
پنج شنبه 01 مهر 1389, 22:02 عصر
کدی را که sqlConnection را به وچود می آورد را می توانید اینجا درج کنید؟

Glx.Mzf
پنج شنبه 01 مهر 1389, 22:21 عصر
این هم کدش(البته اگه منظورتون رو درست فهمیده باشم!)


sqlConnection = new SqlConnection(@"server = .\sqlexpress;database = montazeri_AbbasAbad ;integrated security = true");

بهزادصادقی
پنج شنبه 01 مهر 1389, 22:41 عصر
خوب یه نظر می رسد حداقل قسمتی از فرضیه من درست بود. شما دارید به دیتابیس montazeri_AbbasAbad وصل می شوید (connection به وچود می آورید) و بعد با استفاده از این connection دارید همان دیتابیس را restore می کنید.

این احتمالا connection شما را سر به نیست می کند.

منتهی من با سی شارپ سالهاست که کار نکردم. نمی دونم چه جوری این connection را از بین ببرم و دوباره از اول به وجود بیاورم تا کار کند.

شاید شما بتونید کدی را که برای این کار نوشتید اینجا درج کنید، و دوستان بتوانند اظهار نظر کنند.

Glx.Mzf
پنج شنبه 01 مهر 1389, 22:50 عصر
چند لحظه پیش یه کانکشن جدید درست کردم ،ولی بازم نشد.این هم کد


privatevoid button3_Click_2(object sender, EventArgs e)
{
sqlConnection = null;// previous Connection
SqlConnection sqlConnection2 = newSqlConnection( // New Connection
@"server (Connection@"server) = .\sqlexpress;database = montazeri_AbbasAbad ;integrated security = true");
OpenFileDialog openFileDialog1 = newOpenFileDialog();
openFileDialog1.ShowDialog();
if ((openFileDialog1.FileName != "") && (openFileDialog1.FileName != "openFileDialog1"))
{
try
{
string filename = openFileDialog1.FileName;
sqlCommand.Connection = sqlConnection2;
sqlCommand.CommandText = "ALTER DATABASE montazeri_AbbasAbad SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;"
+ " RESTORE DATABASE montazeri_AbbasAbad FROM DISK =N'" + filename + "' WITH REPLACE ";
sqlCommand.Connection = sqlConnection;
sqlConnection2.Open();
this.Cursor = Cursors.WaitCursor;
sqlCommand.ExecuteNonQuery();
MessageBox.Show(" ");
this.Cursor = Cursors.Default;
//sqlCommand.CommandText = " ALTER DATABASE montazeri_AbbasAbad SET MULTI_USER ";
//sqlCommand.ExecuteNonQuery();
//sqlConnection2 = null;
sqlConnection = newSqlConnection( //
@"server = .\sqlexpress;database = montazeri_AbbasAbad ;integrated security = true");
}
catch
{
MessageBox.Show(" ");
}
finally
{
sqlConnection2.Close();
}
}
}

lastmory
جمعه 02 مهر 1389, 08:44 صبح
سلام
خسته نباشی دوست من
برای Restore کردن بهتره به Master کانکت بشی
موفق باشی

tooraj_azizi_1035
شنبه 03 مهر 1389, 10:38 صبح
دوستان اگر منابعی رو که از اون برای پاسخ گوئی استفاده می کنید رو ذکر کنید ممنون می شم. در جواب سوال Glx.Mfz:

بعد از Restore دیتابیس از این کد استفاده کن:
System.Data.SqlClient.SqlConnection.ClearAllPools( );

Glx.Mzf
شنبه 03 مهر 1389, 20:50 عصر
دستت درد نکنه :تشویق: جواب داد.
فقط نمی دونم کارش چیه؟ :متفکر:

tooraj_azizi_1035
یک شنبه 04 مهر 1389, 09:21 صبح
ADO .NET مایکروسافت از یه تکنیک بهینه سازی به نام Connection Pooling استفاده می کنه. علت استفاده از این تکنیک و توضیحات بیشتر در مورد اون رو می تونی تو این لینک (http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) پیدا کنی.