Private Sub Проверить_соединение(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bCheck.Click
Me.Cursor = Cursors.WaitCursor
Dim connectionString As String
connectionString = "Server=(local)\SQLEXPRESS;DataBase=;Integrated Security=SSPI"
Try
Dim connection As New SqlConnection(connectionString)
connection.Open()
connection.Close()
Catch ex As Exception
MsgBox("SQL Server не существует, или доступ запрещён", vbExclamation)
Me.Cursor = Cursors.Default
Exit Sub
End Try
connectionString = "Server=(local)\SQLEXPRESS;DataBase=DKP;Integrated Security=SSPI"
Try
Dim connection = New SqlConnection(connectionString)
connection.Open()
connection.Close()
MsgBox("Проверка соединения выполнена.", vbInformation)
Catch ex As Exception
MsgBox("Невозможно открыть базу данных " & Chr(34) & tBD.Text & Chr(34), vbExclamation)
End Try
Me.Cursor = Cursors.Default
End Sub
VB 2010 Express. Ошибки в работе с SQL Express
Происходят непонятные мне проблемы. Есть две процедуры. 1 - проверка соединения с БД. 2 - создание БД и таблиц. Всё делаю примитивным способом, но тем не менее...
Проверка БД:
Код:
Создание БД и таблиц:
Код:
Private Sub СоздатьБД()
Dim connectionString As String
Dim sqlStatement As String = _
"IF EXISTS (" & _
"SELECT * " & _
"FROM master..sysdatabases " & _
"WHERE Name = 'DKP')" & vbCrLf & _
"DROP DATABASE DKP" & vbCrLf & _
"CREATE DATABASE DKP"
connectionString = "Server=(local)\SQLEXPRESS;DataBase=;Integrated Security=SSPI"
'ПРОВЕРКА SQL
Try
Dim connection As New SqlConnection(connectionString)
connection.Open()
Catch ex As Exception
MsgBox("SQL Server не существует, или доступ запрещён", vbExclamation)
Me.Cursor = Cursors.Default
Exit Sub
End Try
'СОЗДАНИЕ БД
Try
Dim connection1 As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(sqlStatement, connection1)
connection1.Open()
cmd.ExecuteNonQuery()
connection1.Close()
Catch ex As Exception
MsgBox("Невозможно создать базу данных " & Chr(34) & tBD.Text & Chr(34), vbExclamation)
Me.Cursor = Cursors.Default
End Try
'СОЗДАНИЕ ТАБЛИЦ
Dim strSQL As String
connectionString = "Server=(local)\SQLEXPRESS;DataBase=DKP;Integrated Security=SSPI"
Try
Dim connection As New SqlConnection(connectionString)
connection.Open()
strSQL = ПараметрыТаблицы("Base")
Dim cmd As New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("General")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("FindAuto")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("ExcludeAuto")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("Connect")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
connection.Close()
MsgBox("База данных успешно создана/очищена.", vbInformation)
Catch ex As Exception
MsgBox("Невозможно открыть базу данных " & Chr(34) & tBD.Text & Chr(34), vbExclamation)
End Try
End Sub
Dim connectionString As String
Dim sqlStatement As String = _
"IF EXISTS (" & _
"SELECT * " & _
"FROM master..sysdatabases " & _
"WHERE Name = 'DKP')" & vbCrLf & _
"DROP DATABASE DKP" & vbCrLf & _
"CREATE DATABASE DKP"
connectionString = "Server=(local)\SQLEXPRESS;DataBase=;Integrated Security=SSPI"
'ПРОВЕРКА SQL
Try
Dim connection As New SqlConnection(connectionString)
connection.Open()
Catch ex As Exception
MsgBox("SQL Server не существует, или доступ запрещён", vbExclamation)
Me.Cursor = Cursors.Default
Exit Sub
End Try
'СОЗДАНИЕ БД
Try
Dim connection1 As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(sqlStatement, connection1)
connection1.Open()
cmd.ExecuteNonQuery()
connection1.Close()
Catch ex As Exception
MsgBox("Невозможно создать базу данных " & Chr(34) & tBD.Text & Chr(34), vbExclamation)
Me.Cursor = Cursors.Default
End Try
'СОЗДАНИЕ ТАБЛИЦ
Dim strSQL As String
connectionString = "Server=(local)\SQLEXPRESS;DataBase=DKP;Integrated Security=SSPI"
Try
Dim connection As New SqlConnection(connectionString)
connection.Open()
strSQL = ПараметрыТаблицы("Base")
Dim cmd As New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("General")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("FindAuto")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("ExcludeAuto")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
strSQL = ПараметрыТаблицы("Connect")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
connection.Close()
MsgBox("База данных успешно создана/очищена.", vbInformation)
Catch ex As Exception
MsgBox("Невозможно открыть базу данных " & Chr(34) & tBD.Text & Chr(34), vbExclamation)
End Try
End Sub
Так вот:
БД НЕ СОЗДАНА!
Если:
1) После запуска программы сразу выполняю создание БД и таблиц. Всё проходит прекрасно. Затем проверка соединения выполняется прекрасно.
2) После запуска программы выполняю проверку соединения, выполняется хорошо (ну в смысле говорит, что не может открыть БД). После этого запускаю создание БД. Выдаёт ошибку при создании таблиц на строке "connection.Open()". Говорит, что неправильный логин!
БД СОЗДАНА!
Если:
1) После запуска программы сразу выполняю создание БД и таблиц (это делаю для того, чтобы очистить БД). Всё проходит прекрасно. Затем проверка соединения выполняется прекрасно.
2) После запуска программы выполняю проверку соединения, выполняется хорошо (хоть сколько раз). После этого запускаю создание БД. Выдаёт ошибку при создании БД на строке "cmd.ExecuteNonQuery()". Говорит, что БД используется!
3) После запуска программы сразу выполняю создание БД и таблиц. Всё проходит прекрасно. Затем снова запускаю создание БД. Ругается как и во втором пункте.
Что за ерунда происходит? Каких нюансов я не знаю при работе с SQL? Очень прошу помочь.
Может есть другие быстрые способы очистки БД?
Заранее благодарен!
И еще замените
СоздатьБД() , Проверить_соединение , ПараметрыТаблицы и т.д [COLOR="blue"]хотя бы на латынь[/COLOR]
P.S
Выдаёт ошибку при создании БД на строке "cmd.ExecuteNonQuery()".
В какой строке выдаёт ошибку из вашего кода выше если
[COLOR="#ff8c00"]strSQL = ПараметрыТаблицы("General")
cmd = New SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()[/COLOR]
тогда пробуйте без [COLOR="blue"]NEW[/COLOR]
[COLOR="#2e8b57"]strSQL = ParametryTablitsy("General")
cmd = SqlCommand(strSQL, connection)
cmd.ExecuteNonQuery()
[/COLOR]
и т.д
P.S.
Все dim connection и dim cmd вынес из try-ев.
А нет...... не всегда ПОЧЕМУ-ТО!!! При создании таблиц иногда не может открыть БД. Почему ИНОГДА?? понять не могу. Чо попало...
Код:
Do While connection.State = 0
Try
connection.Open()
Catch ex As Exception
End Try
Loop
Try
connection.Open()
Catch ex As Exception
End Try
Loop
Иногда резко подключается и выходит, иногда может и секунд 5 крутиться. Но в конце концов открывает. Конечно нужно добавить ещё ручной выход из цикла по какому-нибудь флагу. Но способ решил оставить такой. Потому как если ставить задержку, то неизвестно на какое время... Тем более процы везде разные.
Надо разобраться
[COLOR="#4169e1"]Try
[ Finally
[ finallyStatements ] ]
End Try[/COLOR]
Посмотрите здесь
Цитата:
Все dim connection и dim cmd вынес из try-ев.
А нет...... не всегда ПОРЧЕМУ-ТО!!!
А нет...... не всегда ПОРЧЕМУ-ТО!!!
Объявите на уровне формы, а не процедуры