VB.NET dispose

Status
Niet open voor verdere reacties.

ryntje

Gebruiker
Lid geworden
24 apr 2012
Berichten
6
Hi all,

I'm quit new to VB.net and I'm trying to make an application.
It run quit well in VS2010 (debug), but when I "Run Code Analysis on <application> I get a lot of messages:

Warning 1 CA2000 : Microsoft.Reliability : In method 'InputForm.BulkDb(String)', object 'SQLconnect' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'SQLconnect' before all references to it are out of scope. C:\SMAExec\PV2SQLDB\PV2SQLDB\InputForm.vb 927 PV2SQLDB

I was searching for this error and you have to dispose the method, but whatever I do the meesge still occurs.
This is a part of my code:

Public Sub BulkDb(ByVal FullSqlFile As String)
Dim SQLconnect As New SQLite.SQLiteConnection()
Dim SQLcommand As SQLite.SQLiteCommand

SQLconnect.ConnectionString = "Data Source=" & ApplicPath + DatabaseName & ";"
SQLconnect.Open()
SQLcommand = SQLconnect.CreateCommand

'Reads the SQL input file and execute commands
Dim objReader As New System.IO.StreamReader(FullSqlFile)
Dim TextLine As String
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SQLcommand.CommandText = TextLine
SQLcommand.ExecuteNonQuery()
Loop
objReader.Close()
SQLcommand.Dispose()
SQLconnect.Close()
SQLconnect.Dispose()
End Sub

As you can see i'm disposing SQLcommand as well as SQLconnect but it doesn't help.
I'm using also .NET4.

Anyone ideas??
 
Je weet dat dit een Nederlands forum is?
 
Ja, maar het is een gewoontje geowrden om alles Engelstalig te doen.
Tevens is de code en de errormeldingen toch ook engelstalig dus veel verschil maakt het niet :-)
 
Beste ryntje
het verschil is net zo groot als het snappen van je code en het niet snappen van de code
 
Ik stel een vraag over VB.NET en het enig ewat ik te horen krijg is een discussie over de gevoerde taal. Sorry.
Hier mijn vraag in het Nederlands:


Ik ben redelijk nieuw in het schrijven van VB.net code
Hieronder (een stukje) code van een applicatie waarmee ik bezig ben. Onder VS2010 loopt het zonder problemen maar als ik "Run Code Analysis on <programmanaam>" draai dan krij ik de volgende foutmeldingen:

Warning 1 CA2000 : Microsoft.Reliability : In method 'InputForm.BulkDb(String)', object 'SQLconnect' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'SQLconnect' before all references to it are out of scope. C:\SMAExec\PV2SQLDB\PV2SQLDB\InputForm.vb 927 PV2SQLDB

Ik ben al op zoek gegaan naar wat deze melding betekend en kom uit dat ik een dispose van het het object moet doen. Ik heb deze dispose code toegevoegd maar er is nog geen verbetering

Public Sub BulkDb(ByVal FullSqlFile As String)
Dim SQLconnect As New SQLite.SQLiteConnection()
Dim SQLcommand As SQLite.SQLiteCommand

SQLconnect.ConnectionString = "Data Source=" & ApplicPath + DatabaseName & ";"
SQLconnect.Open()
SQLcommand = SQLconnect.CreateCommand

'Reads the SQL input file and execute commands
Dim objReader As New System.IO.StreamReader(FullSqlFile)
Dim TextLine As String
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SQLcommand.CommandText = TextLine
SQLcommand.ExecuteNonQuery()
Loop
objReader.Close()
SQLcommand.Dispose()
SQLconnect.Close()
SQLconnect.Dispose()
SQLconnect = Nothing
End Sub

Heeft er iemand een idee of toevoeging?
 
Ok Ryntje
Ik ben niet zo goed in talen en vertaald met bing snap ik er niets van.


bingvertaling
Ik ben gestopt nieuwe aan VB.net en ik probeer om een toepassing te maken.Het lopen goed in VS2010 quit (debug), maar wanneer ik "Run Code analyse op <application> ik krijg veel van berichten:


Ok je vraag.
ik neem aan dat je hier je ConnectionString hebt staan?

Code:
SQLconnect.ConnectionString = "Data Source=" & ApplicPath + DatabaseName & ";"
 
Ik heb trouwens hetzelde euvel bij de volgende code:

Private Sub CreateCfgFile()
'Creates a config file
'=====================
Dim objWriter As New System.IO.StreamWriter(CfgFile)
objWriter.Write("#" + vbCrLf)
.
.
objWriter.Close()
objWriter.Dispose()
End Sub

Melding:
Warning 5 CA2000 : Microsoft.Reliability : In method 'InputForm.CreateCfgFile()', object 'objWriter' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'objWriter' before all references to it are out of scope. C:\SMAExec\PV2SQLDB\PV2SQLDB\InputForm.vb 719 PV2SQLDB


Weinig code en toch fout :-(
 
Ook Hier wordt door jou geen file opgegeven.
Voorbeeld van een connection string
Code:
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;

In de code word alleen maar gezegt Maak een CfgFile met als schijdingsteken een # en een nieuwe lijn


Je programma weet dus echt niet wat hij er mee moet.
Dus wat moet er worden weggeschreven?
Code:
Dim objWriter As New System.IO.StreamWriter(CfgFile)
 objWriter.Write("#" + vbCrLf)
 
Ik gebruik "Dim objWriter As New System.IO.StreamWriter(CfgFile)" waarbij CfgFile een variabele is met het hel pad en filenaam.
Het bestand wordt keurig gemaakt en volgeschreven.
Ook wordt het bestand gesloten met "objWriter.Close()"

Alleen ik schijn maar niet van het object objWriter af te komen met "objWriter.Dispose()"
 
Probeer het eens zo.

Code:
Dim CfgFile As String = "C:\Users\Owner\Documents\test2.txt"

If System.IO.File.Exists(CfgFile) = True Then
Dim objWriter As New System.IO.StreamWriter(CfgFile)
objWriter.Write("#" + vbCrLf)
objWriter.Close()
MsgBox("Text written to file")
Else
MsgBox("File Does Not Exist")
End If
 
Hi ryntje

Probeer dit eens bij mij werkt dit
Code:
 objWriter.Close() 
 objWriter.Dispose()
 objWriter = Nothing
 
Of gebruik het Using keyword om er zeker van te zijn dat het object netjes "gedisposed" word.

Code:
Using objWriter As New System.IO.StreamWriter(CfgFile)
objWriter.Write("#" + vbCrLf)
End Using
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan