Function dbExecuteScalar(ByVal strSQL) As String
Dim objConn As SqlClient.SqlConnection
Dim objCmd As SqlClient.SqlCommand
Dim myValue As String
Try
objConn = New SqlClient.SqlConnection(myConnectionString)
objConn.Open()
objCmd = New SqlClient.SqlCommand(strSQL, objConn)
objCmd.CommandType = CommandType.Text
myValue = objCmd.ExecuteScalar()
objConn.Close()
Catch
End Try
Return myValue
End Function
Function dbExecuteScalar(ByVal strSQL) As String
Dim objConn As SqlClient.SqlConnection
Dim objCmd As SqlClient.SqlCommand
Dim myValue As String
Try
objConn = New SqlClient.SqlConnection(myConnectionString)
objConn.Open()
objCmd = New SqlClient.SqlCommand(strSQL, objConn)
objCmd.CommandType = CommandType.Text
[b]myValue = objCmd.ExecuteScalar()[/b]
objConn.Close()
Catch
End Try
Return myValue
End Function
Du kan inte garantera att myValue verkligen får ett värde, då du kanske får ett fel när du försöker koppla upp dig mot databasen.
Så antingen ger du myValue ett default value när du skapar variablen, eller så får du ge myValue ett värde i din catch funktion.
En annan sak är att det är inte speciellt lyckat att lägga objConn.Close() där du har lagt den eftersom du återigen inte kan vara garanterad att den kodraden verkligen exekveras, vilket kan leda till att du inte får stängt din koppling till databasen. Din stängning av kopplingen skall ske i ett Finally-block eftersom det är garanterat att exekveras även om du får något fel i ditt try-catch block.
En sak som jag glömde säga, att göra en try-cath så som du gjort där du inte gör något som helst i din catch, är en verklig no-no. Det är vad man kallar: exception-swallower.
Alltså att du får ett fel, men du kommer aldrig märka det eftersom du fångar det, men sedan gör du inget mer med det, du loggar inte det, du meddelar inte programet genom att kasta det vidare. Det kommer leda till problem senare när programmet sedan kör i skarp drift.
Vi hade just det problemmet i en av våra standard komponenter som hanterar databaskommunikationen, man hade gjort följande:
try{
connection.close();
}catch(Exception e){}
så trodde personen att allt var bra, problemet var bara i det lägget var connection objectet null, men kopplingen låg öppen via ett transactionsobjekt och detta resulterade i att kopplingen aldrig stängdes och tillslut så fick vi fel från connectionpoolen att det inte fanns några lediga connections att använda, detta skedde helt oregelbundet eftersom man använde komponenten olika mycket vid olika tider, så det tog lång tid innan vi hittade felet.
- M
257 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a