【发布时间】:2020-03-21 16:22:19
【问题描述】:
我在使用 Visual Studio 2019 时遇到了一些问题。我想创建一个本地数据库,然后对其进行扩展。
首先,我想看看我是否仍然可以建立一个简单的连接,但我没有这样做(我导入了 NuGet 包 System.Data.SqlClient 以供参考)。
所以到目前为止我做了什么:
- 我创建了一个类
SQLControl(见下图代码) - 我还创建了一个扩展名为
.mdf的简单数据库,其中包含一个名为Food的新表:
CREATE TABLE [dbo].[Food]
(
[Id] INT NOT NULL,
[Food_Name] NVARCHAR (30) NOT NULL,
[Food_Type] NVARCHAR (30) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
通过编辑“显示表数据”界面,我用 5 个 ID 条目填充了这个数据表。
之后我想看看连接是否有效,所以我做了一个表格:
public Class Form1
Private SQL As New SQLControl
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GetFoods()
End Sub
Private Sub GetFoods()
SQL.ExecQuery("SELECT Food_Name FROM Food")
MsgBox(SQL.RecordCount)
End Sub
End Class
这应该简单地计算 5 个条目并返回值 5 作为弹出窗口。但它只给我一个 0。你们能帮帮我吗?
类 SQLControl.vb:
Imports System.Data
Imports System.Data.SqlClient
Public Class SQLControl
Private SQLCon As New SqlConnection("Data Source = Database1.mdf;")
Private SQLCmd As SqlCommand
Public SQLDA As SqlDataAdapter
Public SQLDS As DataSet
Public Params As New List(Of SqlParameter)
Public RecordCount As Integer
Public Exception As String
Public Sub ExecQuery(Query As String)
Try
SQLCon.Open()
SQLCmd = New SqlCommand(Query, SQLCon)
Params.ForEach(Sub(x) SQLCmd.Parameters.Add(x))
Params.Clear()
SQLDS = New DataSet
SQLDA = New SqlDataAdapter(SQLCmd)
RecordCount = SQLDA.Fill(SQLDS)
SQLCon.Close()
Catch ex As Exception
Exception = ex.Message
End Try
If SQLCon.State = ConnectionState.Open Then SQLCon.Close()
End Sub
Public Sub AddParam(Name As String, Value As Object)
Dim NewParam As New SqlParameter(Name, Value)
Params.Add(NewParam)
End Sub
End Class
【问题讨论】:
-
您不能直接从 .NET 代码中打开 SQL Server
.mdf文件。.mdf文件(以及任何随附的.ndf和.ldf文件)必须由 SQL Server 或 SQL Server Express 托管和管理,并且您的代码通过 SQL 与Server=localhost,1433;Database=Database1;User Id=MySqlLogin;Password=MyStr0ngP4assw0rd;之类的东西连接。
标签: sql-server database vb.net