【VB连接SQL数据库:从小白到大师的进阶之路】
发布时间: 2024-07-31 01:21:07 阅读量: 20 订阅数: 29
![【VB连接SQL数据库:从小白到大师的进阶之路】](https://hanam88.com/images/posts/023938-13122022-concepts-oop-hanam-88.jpg)
# 1. VB基础与SQL简介**
VB(Visual Basic)是一种面向对象的编程语言,广泛用于开发Windows应用程序。它提供了一个易于使用的开发环境,允许开发者快速创建功能强大的应用程序。
SQL(Structured Query Language)是一种用于与关系型数据库进行交互的标准语言。它允许用户创建、修改和查询数据库中的数据。SQL语句由一系列命令组成,这些命令用于执行各种操作,例如检索数据、更新记录和创建表。
# 2. VB连接SQL数据库
### 2.1 ADO.NET技术简介
#### 2.1.1 ADO.NET架构
ADO.NET(ActiveX Data Objects .NET)是微软为.NET Framework开发的数据访问技术,提供了一组用于访问和操作数据库的类和接口。其架构主要包括以下组件:
- **连接对象:**建立和管理与数据库的连接。
- **命令对象:**执行SQL语句或存储过程。
- **数据适配器对象:**在数据集和数据源之间传输数据。
- **数据集对象:**在内存中表示数据库中的数据。
#### 2.1.2 ADO.NET对象模型
ADO.NET对象模型是一个层次结构,其中每个对象都具有特定的功能:
- **Connection:**表示与数据库的连接。
- **Command:**表示要执行的SQL语句或存储过程。
- **DataAdapter:**将数据从数据源填充到数据集,并更新数据源中的数据。
- **DataSet:**在内存中表示数据库中的数据,包括表、行和列。
### 2.2 数据库连接字符串配置
#### 2.2.1 连接字符串语法
数据库连接字符串是一个字符串,用于指定连接到数据库所需的信息,其语法如下:
```
"Provider=PROVIDER_NAME;Data Source=DATA_SOURCE;Initial Catalog=CATALOG_NAME;User ID=USER_ID;Password=PASSWORD;"
```
其中:
- **PROVIDER_NAME:**数据库提供程序的名称,如"System.Data.SqlClient"。
- **DATA_SOURCE:**数据库服务器的名称或IP地址。
- **CATALOG_NAME:**要连接的数据库名称。
- **USER_ID:**连接到数据库的用户名。
- **PASSWORD:**连接到数据库的密码。
#### 2.2.2 连接字符串属性
连接字符串可以包含以下属性:
- **Integrated Security:**指定是否使用Windows身份验证。
- **Timeout:**指定连接尝试的超时时间。
- **Pooling:**指定是否使用连接池。
- **Max Pool Size:**指定连接池中允许的最大连接数。
### 2.3 数据查询与操作
#### 2.3.1 数据命令对象
数据命令对象用于执行SQL语句或存储过程。它具有以下属性:
- **CommandText:**要执行的SQL语句或存储过程。
- **CommandType:**指定命令的类型,如Text或StoredProcedure。
- **Parameters:**包含命令的参数。
#### 2.3.2 数据适配器对象
数据适配器对象在数据集和数据源之间传输数据。它具有以下方法:
- **Fill:**将数据从数据源填充到数据集。
- **Update:**将数据集中的更改更新到数据源。
#### 2.3.3 数据集对象
数据集对象在内存中表示数据库中的数据。它具有以下属性:
- **Tables:**包含数据集中的表集合。
- **Relations:**包含数据集中的表之间的关系。
- **Constraints:**包含数据集中的约束。
# 3. VB SQL查询与操作
### 3.1 SQL语句基础
#### 3.1.1 SQL语法结构
SQL(Structured Query Language,结构化查询语言)是一种用于与关系型数据库交互的语言。其语法结构遵循以下规则:
- **语句以关键字开头,以分号结尾。**
- **表名和列名使用大写字母。**
- **关键字和保留字使用小写字母。**
- **字符串使用单引号或双引号括起来。**
- **注释以两个连字符(--)开头,直到行尾。**
#### 3.1.2 常用SQL语句
常用的SQL语句包括:
- **SELECT**:用于从数据库中检索数据。
- **INSERT**:用于向数据库中插入新数据。
- **UPDATE**:用于更新数据库中的现有数据。
- **DELETE**:用于从数据库中删除数据。
- **CREATE TABLE**:用于创建新的数据库表。
- **ALTER TABLE**:用于修改现有数据库表的结构。
- **DROP TABLE**:用于删除现有数据库表。
### 3.2 VB中执行SQL查询
在VB中,可以使用两种主要方法执行SQL查询:
#### 3.2.1 使用DataReader读取数据
DataReader对象用于从数据库中读取数据,并以只读方式提供对数据的访问。
```vb
Dim connectionString As String = "Server=localhost;Database=Northwind;User Id=sa;Password=123456;"
Dim connection As New SqlConnection(connectionString)
Dim command As New SqlCommand("SELECT * FROM Customers", connection)
Dim reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine(reader("CustomerID") & " " & reader("CompanyName"))
End While
reader.Close()
connection.Close()
```
#### 3.2.2 使用DataSet更新数据
DataSet对象用于在内存中表示数据库数据,并允许对数据进行修改。
```vb
Dim connectionString As String = "Server=localhost;Database=Northwind;User Id=sa;Password=123456;"
Dim connection As New SqlConnection(connectionString)
Dim command As New SqlCommand("SELECT * FROM Customers", connection)
Dim adapter As New SqlDataAdapter(command)
Dim dataSet As New DataSet()
adapter.Fill(dataSet)
' 修改数据
dataSet.Tables("Customers").Rows(0)("CompanyName") = "New Company Name"
' 更新数据库
adapter.Update(dataSet)
```
### 3.3 数据绑定与显示
数据绑定是一种将数据源与用户界面控件关联的技术,从而允许数据自动更新控件。
#### 3.3.1 数据绑定技术
VB中常用的数据绑定技术包括:
- **DataSource**:指定数据源。
- **DataMember**:指定数据源中的特定表或视图。
- **DataBindings**:将数据源中的特定字段与控件中的特定属性关联。
#### 3.3.2 数据绑定控件
VB中可以与数据绑定的控件包括:
- **TextBox**:用于显示和编辑文本数据。
- **Label**:用于显示文本数据。
- **ComboBox**:用于从下拉列表中选择值。
- **ListBox**:用于从列表中选择多个值。
- **DataGridView**:用于显示和编辑表格数据。
# 4. VB SQL高级应用
### 4.1 SQL存储过程与函数
#### 4.1.1 存储过程创建与调用
**存储过程**是预先编译并存储在数据库中的SQL语句集合,可以作为独立的单元执行。存储过程可以接受参数,并返回结果。
**创建存储过程**
```sql
CREATE PROCEDURE GetCustomerOrders
(
@CustomerID int
)
AS
BEGIN
SELECT * FROM Orders WHERE CustomerID = @CustomerID;
END
```
**调用存储过程**
```vb
Dim connection As New SqlConnection("ConnectionString")
Dim command As New SqlCommand("GetCustomerOrders", connection)
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add("@CustomerID", SqlDbType.Int).Value = 10
Dim reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine(reader("OrderID") & " " & reader("OrderDate"))
End While
```
**参数说明:**
* `@CustomerID`:输入参数,指定要查询的客户ID。
**逻辑分析:**
1. 创建一个名为`GetCustomerOrders`的存储过程,它接受一个`@CustomerID`参数。
2. 存储过程使用`SELECT`语句从`Orders`表中查询指定客户的订单。
3. 在VB中,使用`SqlCommand`对象调用存储过程,并指定`CommandType`为`StoredProcedure`。
4. 添加`@CustomerID`参数,并设置其值。
5. 使用`ExecuteReader`方法执行存储过程,并使用`SqlDataReader`对象读取结果。
#### 4.1.2 函数创建与调用
**函数**是预先编译并存储在数据库中的SQL语句,用于计算和返回单个值。函数可以接受参数,但不能修改数据库数据。
**创建函数**
```sql
CREATE FUNCTION GetCustomerName
(
@CustomerID int
)
RETURNS nvarchar(50)
AS
BEGIN
RETURN (SELECT CustomerName FROM Customers WHERE CustomerID = @CustomerID);
END
```
**调用函数**
```vb
Dim connection As New SqlConnection("ConnectionString")
Dim command As New SqlCommand("SELECT GetCustomerName(10)", connection)
Dim customerName As String = command.ExecuteScalar()
Console.WriteLine(customerName)
```
**参数说明:**
* `@CustomerID`:输入参数,指定要查询的客户ID。
**逻辑分析:**
1. 创建一个名为`GetCustomerName`的函数,它接受一个`@CustomerID`参数。
2. 函数使用`SELECT`语句从`Customers`表中查询指定客户的姓名。
3. 在VB中,使用`SqlCommand`对象调用函数,并使用`ExecuteScalar`方法执行函数。
4. 函数返回查询到的客户姓名。
### 4.2 事务处理与异常处理
#### 4.2.1 事务的概念与操作
**事务**是一组原子性的数据库操作,要么全部成功,要么全部失败。事务确保数据库的完整性,防止数据不一致。
**开启事务**
```vb
Dim connection As New SqlConnection("ConnectionString")
Dim transaction As SqlTransaction = connection.BeginTransaction()
```
**提交事务**
```vb
transaction.Commit()
```
**回滚事务**
```vb
transaction.Rollback()
```
**逻辑分析:**
1. 使用`BeginTransaction`方法开启一个事务。
2. 在事务中执行数据库操作。
3. 如果所有操作成功,则使用`Commit`方法提交事务,使更改永久生效。
4. 如果任何操作失败,则使用`Rollback`方法回滚事务,撤销所有更改。
#### 4.2.2 异常处理机制
**异常**是程序执行过程中发生的错误或异常情况。异常处理机制允许程序处理异常,并采取适当的措施。
**VB中的异常处理**
```vb
Try
' 执行数据库操作
Catch ex As Exception
' 处理异常
End Try
```
**逻辑分析:**
1. 使用`Try`块包含可能引发异常的代码。
2. 使用`Catch`块捕获异常,并指定异常类型(例如`Exception`)。
3. 在`Catch`块中处理异常,例如记录错误信息或采取恢复措施。
### 4.3 数据库安全与优化
#### 4.3.1 用户权限管理
**用户权限管理**是控制用户对数据库资源的访问权限。适当的权限管理可以防止未经授权的访问和数据泄露。
**创建用户**
```sql
CREATE USER [Username] WITH PASSWORD = 'Password';
```
**授予权限**
```sql
GRANT SELECT ON [TableName] TO [Username];
```
**逻辑分析:**
1. 使用`CREATE USER`语句创建用户。
2. 使用`GRANT`语句授予用户对特定表的`SELECT`权限。
#### 4.3.2 数据库性能优化
**数据库性能优化**是提高数据库查询和更新速度的技术。优化可以减少资源消耗,提高应用程序的响应能力。
**优化技术**
* **创建索引:**创建索引可以加快对特定列的查询。
* **使用参数化查询:**使用参数化查询可以防止SQL注入攻击,并提高查询性能。
* **避免不必要的连接:**关闭未使用的数据库连接,以减少资源消耗。
**逻辑分析:**
1. 创建索引可以加快对特定列的查询,因为索引可以快速定位数据。
2. 使用参数化查询可以防止SQL注入攻击,因为参数值不会直接嵌入到SQL语句中。
3. 避免不必要的连接可以减少资源消耗,因为每个连接都需要服务器资源。
# 5. VB SQL实战项目
### 5.1 学生管理系统
#### 5.1.1 数据库设计与表结构
**学生表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| StudentID | int | 是 | | |
| StudentName | nvarchar(50) | | 是 | |
| Gender | char(1) | | | |
| Birthday | date | | | |
| ClassID | int | | | |
**班级表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| ClassID | int | 是 | | |
| ClassName | nvarchar(50) | | 是 | |
| Grade | int | | | |
#### 5.1.2 VB程序设计与实现
**连接数据库**
```vb
Dim connectionString As String = "Data Source=localhost;Initial Catalog=StudentDB;Integrated Security=True"
Dim connection As New SqlConnection(connectionString)
```
**查询学生信息**
```vb
Dim command As New SqlCommand("SELECT * FROM Students", connection)
Dim reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine("{0} {1}", reader("StudentID"), reader("StudentName"))
End While
reader.Close()
```
**添加学生信息**
```vb
Dim command As New SqlCommand("INSERT INTO Students (StudentName, Gender, Birthday, ClassID) VALUES (@StudentName, @Gender, @Birthday, @ClassID)", connection)
command.Parameters.AddWithValue("@StudentName", "John Doe")
command.Parameters.AddWithValue("@Gender", "M")
command.Parameters.AddWithValue("@Birthday", "1990-01-01")
command.Parameters.AddWithValue("@ClassID", 1)
command.ExecuteNonQuery()
```
**修改学生信息**
```vb
Dim command As New SqlCommand("UPDATE Students SET StudentName = @StudentName, Gender = @Gender, Birthday = @Birthday, ClassID = @ClassID WHERE StudentID = @StudentID", connection)
command.Parameters.AddWithValue("@StudentName", "John Doe")
command.Parameters.AddWithValue("@Gender", "M")
command.Parameters.AddWithValue("@Birthday", "1990-01-01")
command.Parameters.AddWithValue("@ClassID", 1)
command.Parameters.AddWithValue("@StudentID", 1)
command.ExecuteNonQuery()
```
**删除学生信息**
```vb
Dim command As New SqlCommand("DELETE FROM Students WHERE StudentID = @StudentID", connection)
command.Parameters.AddWithValue("@StudentID", 1)
command.ExecuteNonQuery()
```
### 5.2 进销存管理系统
#### 5.2.1 数据库设计与表结构
**商品表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| ProductID | int | 是 | | |
| ProductName | nvarchar(50) | | 是 | |
| CategoryID | int | | | |
| UnitPrice | decimal(18, 2) | | | |
| Quantity | int | | | |
**类别表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| CategoryID | int | 是 | | |
| CategoryName | nvarchar(50) | | 是 | |
**进货表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| PurchaseID | int | 是 | | |
| PurchaseDate | date | | | |
| ProductID | int | | | |
| Quantity | int | | | |
| UnitPrice | decimal(18, 2) | | | |
**销货表**
| 字段名 | 数据类型 | 主键 | 唯一索引 | 外键 |
|---|---|---|---|---|
| SaleID | int | 是 | | |
| SaleDate | date | | | |
| ProductID | int | | | |
| Quantity | int | | | |
| UnitPrice | decimal(18, 2) | | | |
#### 5.2.2 VB程序设计与实现
**连接数据库**
```vb
Dim connectionString As String = "Data Source=localhost;Initial Catalog=InventoryDB;Integrated Security=True"
Dim connection As New SqlConnection(connectionString)
```
**查询商品信息**
```vb
Dim command As New SqlCommand("SELECT * FROM Products", connection)
Dim reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine("{0} {1}", reader("ProductID"), reader("ProductName"))
End While
reader.Close()
```
**添加商品信息**
```vb
Dim command As New SqlCommand("INSERT INTO Products (ProductName, CategoryID, UnitPrice, Quantity) VALUES (@ProductName, @CategoryID, @UnitPrice, @Quantity)", connection)
command.Parameters.AddWithValue("@ProductName", "Product 1")
command.Parameters.AddWithValue("@CategoryID", 1)
command.Parameters.AddWithValue("@UnitPrice", 10.00)
command.Parameters.AddWithValue("@Quantity", 100)
command.ExecuteNonQuery()
```
**修改商品信息**
```vb
Dim command As New SqlCommand("UPDATE Products SET ProductName = @ProductName, CategoryID = @CategoryID, UnitPrice = @UnitPrice, Quantity = @Quantity WHERE ProductID = @ProductID", connection)
command.Parameters.AddWithValue("@ProductName", "Product 1")
command.Parameters.AddWithValue("@CategoryID", 1)
command.Parameters.AddWithValue("@UnitPrice", 10.00)
command.Parameters.AddWithValue("@Quantity", 100)
command.Parameters.AddWithValue("@ProductID", 1)
command.ExecuteNonQuery()
```
**删除商品信息**
```vb
Dim command As New SqlCommand("DELETE FROM Products WHERE ProductID = @ProductID", connection)
command.Parameters.AddWithValue("@ProductID", 1)
command.ExecuteNonQuery()
```
**进货**
```vb
Dim command As New SqlCommand("INSERT INTO Purchases (PurchaseDate, ProductID, Quantity, UnitPrice) VALUES (@PurchaseDate, @ProductID, @Quantity, @UnitPrice)", connection)
command.Parameters.AddWithValue("@PurchaseDate", "2023-01-01")
command.Parameters.AddWithValue("@ProductID", 1)
command.Parameters.AddWithValue("@Quantity", 100)
command.Parameters.AddWithValue("@UnitPrice", 10.00)
command.ExecuteNonQuery()
```
**销货**
```vb
Dim command As New SqlCommand("INSERT INTO Sales (SaleDate, ProductID, Quantity, UnitPrice) VALUES (@SaleDate, @ProductID, @Quantity, @UnitPrice)", connection)
command.Parameters.AddWithValue("@SaleDate", "2023-01-01")
command.Parameters.AddWithValue("@ProductID", 1)
command.Parameters.AddWithValue("@Quantity", 50)
command.Parameters.AddWithValue("@UnitPrice", 10.00)
command.ExecuteNonQuery()
```
# 6.1 ORM框架应用
### 6.1.1 ORM概念与优势
对象关系映射(ORM)框架是一种软件工具,它允许开发人员使用面向对象编程(OOP)语言与关系数据库交互。ORM框架通过在对象和关系数据模型之间创建抽象层,简化了数据访问过程。
ORM框架的主要优势包括:
* **提高开发效率:**ORM框架消除了手动编写SQL查询和映射数据对象到关系数据库表的需要,从而提高了开发效率。
* **代码可维护性:**ORM框架通过将数据访问逻辑与业务逻辑分离,提高了代码的可维护性。
* **降低错误风险:**ORM框架通过自动生成SQL查询,降低了编写错误SQL查询的风险。
* **支持多种数据库:**大多数ORM框架支持多种关系数据库,如MySQL、SQL Server和Oracle。
### 6.1.2 Entity Framework框架介绍
Entity Framework(EF)是微软开发的一个流行的ORM框架,用于.NET平台。EF提供了一组对象,用于表示关系数据库模型,并允许开发人员使用LINQ(语言集成查询)查询和操作数据。
EF的主要特性包括:
* **代码优先和数据库优先开发:**EF支持代码优先和数据库优先开发,允许开发人员根据现有数据库或代码模型生成数据库模式。
* **实体和关系映射:**EF将关系数据库表映射到.NET类,并使用数据注释或Fluent API来定义实体和关系之间的映射。
* **LINQ支持:**EF允许开发人员使用LINQ查询和操作数据,从而简化了数据访问。
* **跟踪更改:**EF跟踪对象状态的变化,并提供方法来保存更改到数据库。
* **支持多种数据库:**EF支持多种关系数据库,如SQL Server、MySQL和Oracle。
0
0