سلام خدمت دوستان
برای بکاپ گیری از دیتابیس توسط کاربر برنامه یه Stored Procedure تعریف شده توو اسکیوال به درستی کار میکنه
اما هنگام اجرا سمت برناممه اخطار میده هرچی گشتم نفهمیدم علتش چه
اگه امکانداره راهنمایم کنید
متن خطا :
"System.Data.Entity.Core.EntityCommandExecutionException:
An error occurred while executing the command definition. See the inner exception for details. --->
System.Data.SqlClient.SqlException: Cannot perform a backup or restore operation within a transaction.
nBACKUP DATABASE is terminating abnormally.
at System.Data.SqlClient.SqlConnection.OnError
(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
--- End of inner exception stack trace ---
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.Execute(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.EntityClient.EntityCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Entity.Core.EntityClient.EntityCommand.ExecuteNonQuery()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunctionCommand(EntityCommand entityCommand)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass4b.<ExecuteFunction>b__4a()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass4b.<ExecuteFunction>b__49()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters)
at DataModelLayer.SystemDBEntities.Sp_BackupDatabaseSystemDB(String backupString) in D:\\C#\\System\\System\\System\\DataModelLayer\\DataModel.Context.cs:line 2370
at System.windows.Min.MenuItem_Click(Object sender, RoutedEventArgs e) in D:\\C#\\System\\System\\System\\System\\windows\\Min.xaml.cs:line 149"
کدی که سمت برنامه اجرا میشه:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "System" + String.Format("{0:yyyyMMdd}", Convert.ToDateTime(calender.Text))+ "-"+ DateTime.Now.ToString("HHmmss"); // Default file name
dlg.DefaultExt = ".bak";
dlg.Filter = "Database Backup (.bak)|*.bak";
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
SaveDB = dlg.FileName;
}
try
{
Db.Sp_BackupDatabaseSystemDB(
SaveDB);
Db.SaveChanges();
MessageBox.Show($"نسخه پشتیبان دیتابیس " + "\n" +
"با موفقیت تهیه شد",
$"نسخه پشتیبان دیتابیس",
MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
}
catch (Exception ex)
{
MessageBox.Show("هنگام تهیه نسخه پشتیبان اطلاعات در دیتابیس مشکلی بوجود آماده لطفاً دوباره سعی کنید" + ex.ToString(), "خطای ارتباطی");
}
finally
{
}
}
Stored Procedure :
ALTER procedure [dbo].[Sp_BackupDatabaseSystemDB]
@BackupString nvarchar(max)
as
backup database SystemDB to disk=@BackupString with compression
ممنون میشم کمکم کنید
برای ذخیره سازی BackUp بهتره که آدرس بک آپ گیری توی درایو C یا درایوی که ویندوز توی اون نصب شده نباشه. با توجه به متن خطا ظاهرا مسیری که برای بک آپ گیری انتخاب کردید مناسب نیست یا در لحظه ای که داره بک آپ گرفته میشه اون مسیر توسط تراکنش دیگه ای درگیر هست. البته این یک فرضیه هست.
برای بک آپ گیری بنظرم مستقیم دستور زیر رو از طریق دستورات Sql توی برنامه اجرا کنید و نیازی به یک SP هم نیست
BackUp DataBase DataBaseName To Disk = 'path' With Compression
یکبار یک مسیر در یک درایو دیگه بهش بدید اگر مجدد خطا داشت اعلام کنید
تو این لینک اگه درست متوجه شده باشم گفته با این دستور میشه ولی نتونستم اجررا کنم یوزینگ رو هم انجام دادم
db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
به جای sql وقتی SP خودم رو میزام قبول نمیکنه
با پارامتر ُSaveDB ظاهرا مشکلی نداره
فکر کنم به این شکل باشه
var sql = "backup database SystemDB to disk = {0} with compression";
Db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, SaveDB);
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
346
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
309
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4263
- پاسخ :
1
|
تاریخ :
1398/09/16
- ساعت :
11:41:00 AM
- بازدید :
4279
- پاسخ :
1
|
تاریخ :
1398/09/07
- ساعت :
02:15:00 PM
- بازدید :
3874
- پاسخ :
5
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
654
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3170
- پاسخ :
2
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
54
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
93
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1347
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|