10-2 【操作】SQL Server 安装
Express 版本
SQL Server 2019 Express是SQL Server的一个免费版本,非常适合用于桌面、Web和小型服务器应用程序的开发和生产。
安装时,连接字符串记录一下:
Server=localhost\SQLEXPRESS01;Database=master;Trusted_Connection=True;
SQL Server安装成功后,打开 VS软件,左侧 Server Explorer中选中“Data Connection”右击 - Add Connection...,弹出界面中选择“Microsoft SQL Server”,点击“Continue”,弹出安装缺失组件,确定,安装一下。
Server name: localhost\SQLEXPRESS01
选中 Select or enter a database name: master
10-3 【实战】dataset与table设置
左侧中,选中“Tables”右击 - Add New Table。
对于数据表名称是否使用复数,是存在争议的 使用 Customers 和 Customer 都没有问题的。
选中表中的 Id列,右侧属性中选中 Identity Specificatic: True
建完表,添加一些示例数据。
10-4 【实战】显示列表型数据:客户列表
VS新建项目:WPF_CMS
新建完项目,为了使用数据库,安装一个数据库工具。选中项目“WPF_CMS”右击 - Manage NuGet Packages... ,在 Browse标签页中搜索:system.data.sqlclient ,安装最新版本即可。
左侧 Server Explorer中,点击数据库,右侧属性窗口中“Connection String”就有连接字符串。
左侧选中数据库,右击 - New Query 。
…… 07:00
数据库连接,需要占用IO资源,一般来说一次完成数据库访问,需要执行:打开数据库、读取数据库、关闭数据库 这三个操作。
使用数据库适配器,只需要关注业务层面的操作,比如数据库查询,而打开、关闭数据库这些基本操作,都会由数据库适配器自动帮忙来完成。
只不过,在使用数据库适配器时,需要使用using这个特殊的语法。
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from Customers", _sqlConnection);
using (sqlDataAdapter)
{
DataTable customerTable = new DataTable();
sqlDataAdapter.Fill(customerTable);
}
…… 12:30
数据库的操作实际上是一个 IO读写操作,读写操作涉及到外部环境和外部系统的访问,对于访问外部资源的操作,最好使用 try ... catch ,这样就算数据库出问题了,也不会造成系统级别的崩溃。
10-5 【操作】数据关系与关联表
Appointments(预约表)
CREATE TABLE [dbo].Appointments
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Time] DATETIME NOT NULL,
[CustomerId] INT NOT NULL,
CONSTRAINT [FK_Appointments_Customers] FOREIGN KEY (CustomerId) REFERENCES Customers(Id)
)
10-6 【实战】显示关联型数据:客户预约记录
string query = "select * from Appointments join Customers on Appointments.CustomerId = Customers.Id where Customers.Id = @CustomerId";
SqlCommand sqlCommand = new SqlCommand(query, _sqlConnection);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlCommand.Parameters.AddWithValue("@CustomerId", customerId);
10-7 【实战】删除数据
虽然数据库删除了数据,但是最新的数据并不能反映在UI界面中,所以要刷新一下UI列表
customerList_SelectionChanged(null, null);
对于IO操作,要随时准备系统崩溃的可能性,try ... catch 。
如果错误是在数据库链接打开以后,执行数据库操作的时候发生的,那么可能会跳过数据库关闭的操作。
那么数据库将保持连接的状态。所以,还需要加入 finally
我们在删除客户之前,应该先通过外键关系删除它所有的预约,然后再删除客户。
10-8 【实战】添加数据
10-9 【实战】更新数据