safari_m4
جمعه 23 شهریور 1397, 18:02 عصر
سلام خدمت دوستان
بنده در پشتیبان گیری از طریق BackgroundWorker و کد نویسی با اسکیول با خطای بانک اطلاعاتی مشخص نیست مواجه می شود البته وقتی از دستور بانک اطلاعاتی خود سرور استفاده می کنم مشکلی نیست مانند دستور ذیل:
Public StrCON As String = "Data Source=AA_M1;Initial Catalog=HesabdariData;Integrated Security=True"
ولی وقتی از بانک اطلاعاتی که داخل پوشه ای که در داخل خود برنامه داخل پوشه Debug می باشد خطا می دهد مانند ذیل :
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\DataBase\HesabdariData.mdf;Integrated Security=True;Connect Timeout=30"
یا
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Da taDirectory|\DataBase\HesabdariData.mdf;Integrated Security=True"
یا
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Da taDirectory|\DataBase\HesabdariData.mdf;Integrated Security=True;Connect Timeout=30;Asynchronous Processing=true"
البته بجای این دستور : My.Application.Info.DirectoryPathیا دستور DataDirectory
از مسیر اصلی خود برنامه که داخل کانشکن استرینک ذخیره شد هم استفاده کردم باز هم خطا می دهد که خطا در قسمت این کدی است Cmd.EndExecuteNonQuery(result)
نمونه کد نویسی :
Private Sub BtnBackup_Click(sender As Object, e As EventArgs) Handles BtnBackup.Click
If RdbBackup.Checked = True Then
If String.IsNullOrWhiteSpace(TxtSelectpath.Text) Then
ErrorProvider1.SetError(TxtSelectpath, "مسیر پشتیبان را مشخص کنید")
ElseIf String.IsNullOrWhiteSpace(TxtBackupName.Text) Then
ErrorProvider1.SetError(TxtBackupName, "نام فایل پشتیبان را وارد کنید")
ElseIf File.Exists(TxtSelectpath.Text + "" + TxtBackupName.Text.Trim() + ".bak") Then
MessageBox.Show("در مسیر انتخاب شده قبلا یک فایل با همین نام ذخیره شده است")
Else
flag = True
BtnBackup.Enabled = False
Grp1.Enabled = False
BtnCancel.Visible = True
'Dim cmd As New SqlCommand("My_Backup", con)
Dim cmd As New SqlCommand("Mybackup", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@path", TxtSelectpath.Text & "" & TxtBackupName.Text.Trim() & ".bak")
ProgressBar1.Visible = True
ProgressBar1.PerformStep()
con.Open()
Dim callbackdelegate As AsyncCallback = AddressOf Handlecallback
cmd.BeginExecuteNonQuery(callbackdelegate, cmd)
End If
Else
MessageBox.Show("نوع عملیات پشتیبان را فعال کنید")
End If
Call TxtBackupName_Load()
End Sub
Private Sub Handlecallback(ByVal result As IAsyncResult)
Try
Cmd = CType(result.AsyncState, SqlCommand)
Cmd.EndExecuteNonQuery(result)
MessageBox.Show("عملیات پشتیبان گیری با موفقیت انجام شد")
Catch
MessageBox.Show("عملیات پشتیبان گیری توسط کاربر متوقف شد")
End Try
Me.BeginInvoke(CType(Sub()
Me.Close()
End Sub, MethodInvoker))
con.Close()
flag = False
End Sub
این هم کد خطا :
An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code
Additional information: Database 'HesabdariData' does not exist. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.
بنده در پشتیبان گیری از طریق BackgroundWorker و کد نویسی با اسکیول با خطای بانک اطلاعاتی مشخص نیست مواجه می شود البته وقتی از دستور بانک اطلاعاتی خود سرور استفاده می کنم مشکلی نیست مانند دستور ذیل:
Public StrCON As String = "Data Source=AA_M1;Initial Catalog=HesabdariData;Integrated Security=True"
ولی وقتی از بانک اطلاعاتی که داخل پوشه ای که در داخل خود برنامه داخل پوشه Debug می باشد خطا می دهد مانند ذیل :
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\DataBase\HesabdariData.mdf;Integrated Security=True;Connect Timeout=30"
یا
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Da taDirectory|\DataBase\HesabdariData.mdf;Integrated Security=True"
یا
Public StrCON As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Da taDirectory|\DataBase\HesabdariData.mdf;Integrated Security=True;Connect Timeout=30;Asynchronous Processing=true"
البته بجای این دستور : My.Application.Info.DirectoryPathیا دستور DataDirectory
از مسیر اصلی خود برنامه که داخل کانشکن استرینک ذخیره شد هم استفاده کردم باز هم خطا می دهد که خطا در قسمت این کدی است Cmd.EndExecuteNonQuery(result)
نمونه کد نویسی :
Private Sub BtnBackup_Click(sender As Object, e As EventArgs) Handles BtnBackup.Click
If RdbBackup.Checked = True Then
If String.IsNullOrWhiteSpace(TxtSelectpath.Text) Then
ErrorProvider1.SetError(TxtSelectpath, "مسیر پشتیبان را مشخص کنید")
ElseIf String.IsNullOrWhiteSpace(TxtBackupName.Text) Then
ErrorProvider1.SetError(TxtBackupName, "نام فایل پشتیبان را وارد کنید")
ElseIf File.Exists(TxtSelectpath.Text + "" + TxtBackupName.Text.Trim() + ".bak") Then
MessageBox.Show("در مسیر انتخاب شده قبلا یک فایل با همین نام ذخیره شده است")
Else
flag = True
BtnBackup.Enabled = False
Grp1.Enabled = False
BtnCancel.Visible = True
'Dim cmd As New SqlCommand("My_Backup", con)
Dim cmd As New SqlCommand("Mybackup", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@path", TxtSelectpath.Text & "" & TxtBackupName.Text.Trim() & ".bak")
ProgressBar1.Visible = True
ProgressBar1.PerformStep()
con.Open()
Dim callbackdelegate As AsyncCallback = AddressOf Handlecallback
cmd.BeginExecuteNonQuery(callbackdelegate, cmd)
End If
Else
MessageBox.Show("نوع عملیات پشتیبان را فعال کنید")
End If
Call TxtBackupName_Load()
End Sub
Private Sub Handlecallback(ByVal result As IAsyncResult)
Try
Cmd = CType(result.AsyncState, SqlCommand)
Cmd.EndExecuteNonQuery(result)
MessageBox.Show("عملیات پشتیبان گیری با موفقیت انجام شد")
Catch
MessageBox.Show("عملیات پشتیبان گیری توسط کاربر متوقف شد")
End Try
Me.BeginInvoke(CType(Sub()
Me.Close()
End Sub, MethodInvoker))
con.Close()
flag = False
End Sub
این هم کد خطا :
An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code
Additional information: Database 'HesabdariData' does not exist. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.