Я пытаюсь убедиться, что я не оставляю открытые концы в своем приложении открытыми и беспокоюсь о некоторых, но могу получить ответ из этого.Я «переопределил» некоторые функции, чтобы я мог стараться сохранять все ресурсы максимально чистыми и свободными.Так что в этом случае у меня есть функция с именем ExecuteReader
, которая возвращает DbDataReader
как обычно, но все, что мне нужно было передать - это строка SQL, а не повторное создание DbCommand каждый раз.Я хочу убедиться, что даже при том, что я не могу назвать dbCommand.Dispose()
, что это действительно так.Любая помощь приветствуется.
Public Function ExecuteReader(ByVal strSQL As String) As DbDataReader
Dim dbCommand = _dbConnection.CreateCommand()
dbCommand.CommandText = strSQL
dbCommand.Prepare()
Return dbCommand.ExecuteReader()
End Function
Я думал об использовании оператора using
, но я помню, как видел поток, в котором кто-то сказал, что, по его мнению, он вызывает проблемы с возвратом в using
заявление.Кроме того, я не уверен, должна ли это быть вики сообщества или нет.Если это так, дайте мне знать.Спасибо.
Обновление кода :
Вот пример того, как я его использую.
Public Sub RevertDatabase()
'This function can be used whenever all changes need to be undone, but was created'
'for saving the data as a .out file. It sets all changes back to their original value.'
'Set the data reader to all parts and columns that were changed.'
_dbReader = ExecuteReader("SELECT PART_ID, PART_PREV_VALUE, REPORT_COLUMN_NAME FROM REPORTS WHERE PART_PREV_VALUE NOT NULL")
'Create an instance of the Command class.'
Dim cmd = New Command()
While _dbReader.Read()
'For each part and columns that has been changed, set the values in the'
'new cmd variable and then update the value using the same function'
'that is used whenever a value is changed in the data grid view.'
cmd.CommandString = _dbReader("REPORT_COLUMN_NAME").ToString().Replace("_", " ")
cmd.Value = _dbReader("PART_PREV_VALUE").ToString()
cmd.ID = _dbReader("PART_ID").ToString()
UpdateValue(cmd)
End While
'Close the reader.'
_dbReader.Close()
End Sub
Здесь я установил _dbReaderк тому, что я получу от функции, и в конце концов я закрываю _dbReader.Я не закрываю соединение, так как не открываю его каждый раз, когда делаю запрос.Это база данных SQLite, которую будет одновременно использовать только один пользователь (небольшое приложение с очень-очень малой вероятностью, что оно будет расти), поэтому я не думал, что необходимо все время закрывать и открывать соединение.Может я не прав, не уверен.Используя его таким образом, он потенциально пригоден для очистки ресурсов?