无法使用 Visual Studio 通过 VB.NET 中的连接字符串手动访问本地 SQL 数据库
Can't access Local SQL database manually by connection string in VB.NET using Visual Studio
我有一个项目设置了 3 个独立的 tables。我使用了 Visual Studio.
的内置设计器
table个包含
- 学生
- 课程
- 每门课程的测试
所有 table 共享一个学号。
当我将它们“拖放到”表单上时,我可以毫无问题地获取和访问由 Visual Studio 自动生成的不同 table 适配器和相应的绑定源。我还能够使用查询构建器从每个 table.
中获取我需要的数据
当我尝试通过连接字符串手动访问数据库时出现问题。
我收到这个错误:
Cannot attach file local path\HovedDatabase.mdf as database Outcomes because the file is already in use for database local path\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 数据库建立了一个类似的项目。除了使用相同的 tables.
创建数据库外,我在 Visual Studio 中什么也没做
这里我通过手动连接字符串连接数据库没问题
我的问题是:为什么我在第一个项目中无法使用连接字符串访问本地数据库?
您还没有发布其他连接字符串,但看起来 AttachDbFilename
可能是问题所在。数据库将已经附加,此选项仅用于单用户模式(仅限一个连接)。
最好的办法是将数据库永久附加到 LocalDB 实例,如果这是您一直使用的实例。
我有一个项目设置了 3 个独立的 tables。我使用了 Visual Studio.
的内置设计器table个包含
- 学生
- 课程
- 每门课程的测试
所有 table 共享一个学号。
当我将它们“拖放到”表单上时,我可以毫无问题地获取和访问由 Visual Studio 自动生成的不同 table 适配器和相应的绑定源。我还能够使用查询构建器从每个 table.
中获取我需要的数据当我尝试通过连接字符串手动访问数据库时出现问题。
我收到这个错误:
Cannot attach file local path\HovedDatabase.mdf as database Outcomes because the file is already in use for database local path\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 数据库建立了一个类似的项目。除了使用相同的 tables.
创建数据库外,我在 Visual Studio 中什么也没做这里我通过手动连接字符串连接数据库没问题
我的问题是:为什么我在第一个项目中无法使用连接字符串访问本地数据库?
您还没有发布其他连接字符串,但看起来 AttachDbFilename
可能是问题所在。数据库将已经附加,此选项仅用于单用户模式(仅限一个连接)。
最好的办法是将数据库永久附加到 LocalDB 实例,如果这是您一直使用的实例。