как корректно завершать работу с ADODB в VB.NET
От: sergey2b ЮАР  
Дата: 09.02.11 14:38
Оценка:
Подскажите пожалуйста как как корректно завершить работу с 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
Re: как корректно завершать работу с ADODB в VB.NET
От: ZAMUNDA Земля для жалоб и предложений
Дата: 09.02.11 21:44
Оценка:
Здравствуйте, 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) Козьма Прутков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.