#sql #vb.net #connection-string
#sql #vb.net #строка подключения
Вопрос:
У меня есть проект, созданный с 3 отдельными таблицами. Я использовал встроенный конструктор из Visual Studio.
Таблицы содержат
- Для студентов
- Курсы
- Тесты в каждом курсе
Все таблицы имеют общий studentnumber.
У меня нет проблем с получением и доступом к данным с помощью различных адаптеров таблиц и соответствующих источников привязок, автоматически создаваемых Visual Studio, когда я «перетаскиваю» их в формы. Я также могу использовать конструктор запросов для получения необходимых мне данных из каждой таблицы.
Моя проблема возникает, когда я пытаюсь получить доступ к базе данных вручную через строку подключения.
Я получаю эту ошибку:
Не удается прикрепить локальный путь к файлу HovedDatabase.mdf в качестве базы данных, поскольку файл уже используется для локального пути к базе данных HovedDatabase.mdf
Это код, который у меня есть:
Private Sub FormPrøver3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'StudentDataSet.StudentTabell' table. You can move, or remove it, as needed.
Me.StudentTabellTableAdapter.Fill(Me.StudentDataSet.StudentTabell)
Me.StudentTabellTableAdapter.Connection.Close()
Get_Data_Manualy_Fag()
End Sub
Private Sub Get_Data_Manualy_Fag()
Try
'Create variabals for inputcontainer
Dim Studnr As String = Me.StudentnrLabel1.Text
'Create a connection to the DataBase
Dim myConn As SqlConnection
myConn = New SqlConnection("Initial Catalog=OutComes;Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=|DataDirectory|HovedDatabase.mdf;Integrated Security=True")
'Create a Command object.
Dim myCmd As SqlCommand
myCmd = myConn.CreateCommand
myCmd.CommandText = "SELECT Fag FROM Fag3Tabell WHERE Fag = @Studnr"
myCmd.Parameters.AddWithValue("@Studnr", Studnr)
'Open the connection.
myConn.Open()
'Process the answer
Dim myreader As SqlDataReader
myreader = myCmd.ExecuteReader
'Traverse the DataSet and Display :
Dim i As Integer = 0
Do While myreader.Read()
Me.ComboBox1.Items.Add(myreader.GetString(i))
i = i 1
Loop
'Close the connection
myConn.Close()
'Handle errors
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Я создал аналогичный проект с аналогичной базой данных LocalSQL. Я ничего не делал в Visual Studio, кроме создания базы данных с теми же таблицами.
Здесь у меня нет проблем с подключением к базе данных через строку подключения вручную.
Мой вопрос таков: почему я не могу получить доступ к локальной базе данных с помощью строки подключения в первом проекте?
Ответ №1:
Вы не опубликовали свою другую строку подключения, но, похоже AttachDbFilename
, это может быть проблемой. База данных уже будет подключена, эта опция предназначена только для использования в однопользовательском режиме (только одно подключение). Лучше всего постоянно подключать базу данных к экземпляру LocalDB, если это то, что вы используете все время.
Комментарии:
1. Вторая строка подключения была точно такой же, как и первая, с другим именем файла. Только что создал реплику. Спасибо, что разъяснили мне это. Я думал, что это может быть что-то вроде этого.