Проблема со строкой подключения при подключении к локальной базе данных SQL с использованием VB.NET в Visual Studio

Я не могу понять, почему я не могу подключиться к своей SQL Server Express LocalDB. У меня постоянно возникают проблемы с моей строкой подключения. Это то, что я пробовал:

Imports System.Data.OleDb

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim conString As String        'Connection string
        Dim con As OleDbConnection     'Connecting to your database
        Dim Command As OleDbCommand    'Query  "What do you want in the database"

        'conString = "PROVIDER=System.Data.SqlClient v4.0; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=SQLOLEDB; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=System.Data.SqlClient; Data Source=C:\Users\Bruker\source\repos\InnloggingFørsøkv1\InnloggingFørsøkv1\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Bruker\source\repos\InnloggingFørsøkv1\InnloggingFørsøkv1\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=System.Data.SqlClient v4.0; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"

    Try
           con = New OleDbConnection(conString)
           con.Open()

            Command = New OleDbCommand("select * from LogInTable where UserID = ? and Password = ?", con)



            Dim parm1 As OleDbParameter, parm2 As OleDbParameter

            parm1 = Command.Parameters.Add("@UserID", OleDbType.VarChar)
            parm2 = Command.Parameters.Add("@Password", OleDbType.VarChar)
            parm1.Direction = ParameterDirection.Input
            parm2.Direction = ParameterDirection.Input

            parm1.Value = Me.TextBox1.Text
            parm2.Value = Me.TextBox2.Text

            Command.Connection.Open()
            Dim reader As OleDbDataReader

            If reader.Read = True Then
                Me.DialogResult = DialogResult.OK
            Else
                MsgBox("Invalid UserID or Password")
            End If

            reader = Command.ExecuteReader

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
End Sub

Я пробовал несколько строк подключения, но ни одна из них не работает.

Но с номером 4 я получил ошибку

Многоэтапная операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB.

Остальные приводят к ошибке:

провайдер не опознан

Моя другая попытка была с SqlClient:

Imports System.Data.SqlClient

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim myConn As SqlConnection
        myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=localhost;Integrated Security=SSPI;")

        '"Data Source = (LocalDB) \ MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True")

        '  "Data Source=localhost;Integrated Security=SSPI;")

        'Create a Command object.
        Dim myCmd As SqlCommand
        myCmd = myConn.CreateCommand
        myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"

        'Open the connection.
        myConn.Open()

        Dim results As String
        Dim myReader As SqlDataReader
        myReader = myCmd.ExecuteReader()

        'Traverse the DataSet and Display in GUi for Example:
        Do While myReader.Read()
            results = results & myReader.GetString(0) & vbTab &
                myReader.GetString(1) & vbLf
        Loop
        'Display results.
        MsgBox(results)

        ' Close the reader and the database connection.
        myReader.Close()
        myConn.Close()
End Sub

Моя ошибка здесь была:

System.Data.SqlClient.SqlException: «При подключении к SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на прием внешних подключений. (поставщик: поставщик именованных каналов, ошибка: 40 — невозможно открыть соединение с SQL Server)

У меня есть одна таблица в моей базе данных SQL Server с двумя столбцами UserID и password.

Я был бы очень признателен, если бы кто-то мог указать мне правильное направление здесь. Я прочитал много сообщений на эту тему, но не могу найти, где я ошибаюсь. Моя главная цель здесь — подключиться к моей базе данных.

И вы уверены, что действительно установили пакет SQL Server Express LocalDB?? Вы скачали его с сайта Microsoft и запустили установку? Последняя ошибка явно указывает на то, что сервер базы данных, к которому вы пытаетесь подключиться, просто отсутствует (например, не установлен). Если вы что-то скачали и установили - что именно вы установили?

marc_s 25.12.2020 08:16

У меня был установлен сервер sql, но на всякий случай я переустановил его, как вы и планировали. Исходный проект не подключился, и сообщение об ошибке было таким же, как и раньше. Что я забыл сказать в прошлый раз, так это то, что у меня не было проблем с подключением к базе данных с помощью представления таблиц. Добавление источника данных. А затем бросьте и перетащите таблицу на форму. Это было упражнение в том, чтобы делать это вручную, и я не мог приступить к работе.

Bertil 25.12.2020 17:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
2 187
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

В вашей визуальной студии:

Menu Tools

Connection to database

В диалоге

Data Source : Microsoft SQL Server (sqlClient)

Server Name : ****

вы должны найти свой сервер здесь, выбрать его, иначе это означает, что у вас проблемы с установкой сервера

Authentification : Аутентификация Windows

как я вижу в вашем примере, вы не используете идентификатор SQL, так что все в порядке

Connection to database:

Выберите базу данных, которую вы уже создали, если ничего не видно значит вы не создавали или у вас нет прав на доступ

Затем нажмите кнопку Test Connection если получилось, то нажмите OK

Тогда заходите в свой ToolBox

Data

DataGridView бросьте это в свою форму выберите источник данных: внизу вы увидите + Add the data source нажмите здесь

У вас появится диалог, выберите Database -> Dataset -> выберите подключение для передачи данных вы должны увидеть строку в поле со списком с your server name \ your Database.dbo

Поставьте галочку "Show the connection string saved in the application"

вы ясно увидите свою строку подключения

Далее -> Далее > проверить таблицы

Заканчивать

Если вы застряли в какой-то части, дайте мне знать, чтобы уточнить вас с помощью редактирования

Во-первых, СПАСИБО :), у меня все получилось. Но у меня все еще есть некоторые вопросы. Я начал с нового проекта и сделал локальную sqlDB с одной таблицей. с двумя столбцами «Идентификатор пользователя» и «Пароль». У меня в этой таблице была одна строка с "Админ" и "проход" Я не использовал конструктор таблиц и не добавлял источник данных.

Я следовал вашему описанию в письме и скопировал свою строку подключения в инструменте подключения... Это сработало нормально, и я нашел файл mdf и смог подключиться к нему.

Загрузил форму с сеткой данных и привязал ее к источнику данных. Он работал правильно

Потом попробовал подключиться к БД под новой кнопкой вручную. Я получил это сообщение об ошибке:

System.Data.SqlClient.SqlException: 
'Cannot attach file 'C:\Users\Bruker\source\repos\Connect_v2\Connect_v2\bin\Debug\Database1.mdf' 
as database 'OutComes
' because this file is already in use for database 
'C:\USERS\BRUKER\SOURCE\REPOS\CONNECT_V2\CONNECT_V2\BIN\DEBUG\DATABASE1.MDF''

This was the class:

Imports System.Data.SqlClient

Public Class Form1
   
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'Database1DataSet.LogInTable' table. You can move, or remove it, as needed.
        Me.LogInTableTableAdapter.Fill(Me.Database1DataSet.LogInTable)

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim myConn As SqlConnection
        myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30")



        'Create a Command object.
        Dim myCmd As SqlCommand
        myCmd = myConn.CreateCommand
        myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"

        'Open the connection.
        myConn.Open()

        Dim results As String
        Dim myReader As SqlDataReader
        myReader = myCmd.ExecuteReader()

        'Traverse the DataSet and Display in GUi for Example:
        Do While myReader.Read()
            results = results & myReader.GetString(0) & vbTab &
                myReader.GetString(1) & vbLf
        Loop
        'Display results.
        MsgBox(results)

        ' Close the reader and the database connection.
        myReader.Close()
        myConn.Close()
    End Sub

Я попытался закомментировать событие загрузки, и оно было связано с БД вручную. Это сработало :)

Imports System.Data.SqlClient


Public Class Form1


    'Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    '    'TODO: This line of code loads data into the 'Database1DataSet.LogInTable' table. You can move, or remove it, as needed.
    '    Me.LogInTableTableAdapter.Fill(Me.Database1DataSet.LogInTable)

    'End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim myConn As SqlConnection
        myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30")



        'Create a Command object.
        Dim myCmd As SqlCommand
        myCmd = myConn.CreateCommand
        myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"

        'Open the connection.
        myConn.Open()

        Dim results As String
        Dim myReader As SqlDataReader
        myReader = myCmd.ExecuteReader()

        'Traverse the DataSet and Display in GUi for Example:
        Do While myReader.Read()
            results = results & myReader.GetString(0) & vbTab &
                myReader.GetString(1) & vbLf
        Loop
        'Display results.
        MsgBox(results)

        ' Close the reader and the database connection.
        myReader.Close()
        myConn.Close()
    End Sub
End Class

Это здорово, но мне все еще интересно, почему я получил сообщение об ошибке. Это потому, что адаптер таблицы datagridview поддерживает постоянно открытое соединение с БД. И нельзя ли одновременно иметь несколько открытых соединений?

Я не уверен, что точная причина в том, что вы прикрепили файл mdf для подключения. На мой взгляд, для вашей новой проблемы вы должны пометить это как ответ и сделать еще один пост с этой новой проблемой. возможно, вам помогут другие люди.

B.S. 25.12.2020 18:50

Другие вопросы по теме