Я избавился от дополнительных логических переменных flag
и flag2
и просто протестировал значения напрямую.
Я разделил блоки Using
на 2 блока, чтобы можно было закрыть первую группу объектов. и утилизировать до того, как следующая группа начнет свою работу.
Я сократил код, передав свойства напрямую конструкторам объектов, где это возможно. DataAdapter
и StringBuilder
также предоставляют метод .Dispose
, поэтому я включил их в блоки Using
.
daMDB.AcceptChangesDuringFill = False
Эта строка кода позволяет .DataRowState
оставаться как Added
( обычно он изменяется на Unchanged
методом .Fill
), поэтому DataTable
будет готов добавить все записи во вторую таблицу без l oop.
Я не Я считаю, что учащийся является зарезервированным словом в любой базе данных, поэтому я удалил квадратные скобки.
И методы .Fill
и .Update
для DataAdapter
будут .Open
и .Close
соединения, если они находят связь закрытой. Если они найдут его открытым, то оставят его открытым. Таким образом, закрытие соединения не является необходимым. Также End Using
закрывает и удаляет все объекты, включенные в часть «Использование» (первая строка, включая запятые) блока.
Private Sub OPCode()
OpenFileDialog1.Filter = "mdb files (*.mdb)|*.mdb|All files (*.*)|*.*"
Dim MDBFile As String
If OpenFileDialog1.ShowDialog = DialogResult.OK AndAlso Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then
MDBFile = OpenFileDialog1.FileName
Else
Exit Sub
End If
Dim myConnectionStringMDB As String = "provider=Microsoft.Ace.OLEDB.12.0;" & "data source=" & MDBFile
Dim myConnectionStringSQL As String = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;" & "Data Source=" & Application.StartupPath & "\Archive.sdf"
Dim dt = New Data.DataTable()
Using conMDB As OleDbConnection = New OleDbConnection(myConnectionStringMDB),
cmdMDB As OleDbCommand = New OleDbCommand("SELECT * FROM student", conMDB),
daMDB As New System.Data.OleDb.OleDbDataAdapter(cmdMDB)
daMDB.AcceptChangesDuringFill = False
daMDB.Fill(dt)
End Using
Using conSQL As OleDbConnection = New OleDbConnection(myConnectionStringSQL),
cmdSQL As OleDbCommand = New OleDbCommand("SELECT * FROM student", conSQL),
daSql As New OleDbDataAdapter(cmdSQL),
cbuilderMDB As New OleDbCommandBuilder(daSql)
daSql.Update(dt)
End Using
End Sub