m.r.m.40 Ответов: 1

Различные способы подключения к базе данных


Привет,

Dim conn As New SqlConnection(Acc.Common.Configuration.Instance.ConnectionString)


в vb.net при использовании ado does и работе с соединением имеет ли какое-либо значение, если для oppening соединения я использую приведенный ниже код:

If conn.State = ConnectionState.Closed Then
conn.Open()
End If


или я могу просто использовать следующий код:

conn.Open()


Я предполагаю, что это работает в обоих направлениях, но в логике это делает что-то другое?

спасибо,

Что я уже пробовал:

Оба случая работают на меня, но я просто спрашиваю, какой путь лучше.

1 Ответов

Рейтинг:
0

OriginalGriff

При нормальных обстоятельствах это не должно иметь значения - потому что это очень хорошая идея использовать Using в любом случае блокируйте создание экземпляра:

Using con As New SqlConnection(Acc.Common.Configuration.Instance.ConnectionString)
	con.Open()
	Using com As New SqlCommand("SELECT iD, description FROM myTable", con)
                ...
	End Using
End Using
Потому что это гарантирует, что соединение всегда будет закрыто и удалено, когда вы закончите с ним.
Потому что вы создаете его, открываете и используете-тогда система автоматически закрывается и избавляется от него.
Но...если соединение открыто, когда вы вызываете Open на нем, оно вызовет исключение InvalidOperationException


Maciej Los

А5!

m.r.m.40

Спасибо за Ваше объяснение, но мой вопрос был о том, чтобы сначала проверить, открыт ли он уже! если это так, то ничего, если нет, то откройте его.
Зачем мне это делать?
Когда я могу просто написать conn. open()

OriginalGriff

Перечитайте последнее предложение еще раз...

m.r.m.40

Ой!
Извини, я был на работе и очень занят.
затем, прежде чем вызвать Open на нем, я должен проверить, открыт ли он уже или нет. верно?

OriginalGriff

Да ... но.....они являются дефицитными ресурсами, поэтому вы не должны "цепляться" за них - они должны быть созданы, открыты, использованы, закрыты и утилизированы. Если вы цепляетесь за них, вы можете вызвать худшие проблемы, чем если бы они были открыты при повторной попытке - например, при попытке создать DataReader в соединении, в котором уже открыт DataReader.
Самый простой способ сделать это-использовать блок Using, который удаляет его из области видимости, чтобы он не мог быть использован, когда он закрыт.
И если вы это сделаете, вопрос будет спорным, потому что он открывается только для определенной цели и закрывается, когда с ним разбираются.

m.r.m.40

Большое спасибо. это было прекрасное объяснение.

OriginalGriff

Пожалуйста!