Подскажите пожалуйста как как корректно завершить работу с ADODB в VB.NET (что поместить в Finally для закрытия Connection и Recordset)
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
Dim sUID, sPassword As String
sUID = "sa"
sPassword = "xxx"
Dim origDBName As String
Dim DBName, sQuery As String
origDBName = "MyWorkspace"
Dim cn As New ADODB.Connection()
Dim rs As New ADODB.Recordset()
Try
DBName = UCase(Trim(origDBName))
sQuery = "SELECT name FROM master.dbo.sysdatabases where name='" & DBName & "'"
cn.ConnectionString = "provider=sqloledb;server=cactus;database=MyWorkspace"
cn.Open(, sUID, sPassword)
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic
rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic
rs.Open(sQuery, cn)
'rs.ActiveConnection = Nothing
Dim objDs As New DataSet()
Dim objDa As New System.Data.OleDb.OleDbDataAdapter()
Dim objRow As System.Data.DataRow
Dim objTable As System.Data.DataTable
Dim objColumn As System.Data.DataColumn
objDa.Fill(objDs, rs, "sysdatabases")
Console.WriteLine("There are " & objDs.Tables(0).Rows.Count.ToString & " total databases.")
Console.ReadLine()
For Each objTable In objDs.Tables
Console.WriteLine(objTable.TableName)
For Each objColumn In objTable.Columns
Console.WriteLine(objColumn.ColumnName)
Next
Next
For Each objRow In objDs.Tables(0).Rows
Console.WriteLine(objRow("name").ToString)
Next
'Like Setting to Nothing
objDs.Dispose()
objDa.Dispose()
Catch ex As Exception
MsgBox(ex.Message)
Finally
If cn.State = System.Data.ConnectionState.Open Then cn.Close()
rs = Nothing
cn = Nothing
End Try
End Sub
End Class
Здравствуйте, sergey2b, Вы писали:
S>Подскажите пожалуйста как как корректно завершить работу с ADODB в VB.NET (что поместить в Finally для закрытия Connection и Recordset)
0. Чем ж тебя ADO.Net не устроил?
1. Код оформи...
2.a. А вот совсем не правильно "cn.State = System.Data.ConnectionState.Open" у ADODB константы свои.
2.b. И правильнее писать не "cn.State =adConnectionClosed" а "cn.State <= adConnectionClosed", если уж на то пошло.
c. DBName — у тебя типа Object.
http://msdn.microsoft.com/en-us/library/7ee5a7s1.aspx
3. Первое правило пионера: уничтожать объекты в порядке, обратном порядку их открытия. У Recordset тоже есть Close.
4. Это НЕ ФОРУМ .Net!
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков