C#WPF 项目开发(二)(火车订票系统)

本文是C# WPF项目开发系列的第二部分,主要介绍如何构建火车订票系统的服务层,包括数据库连接、存储过程操作、业务逻辑处理等。详细讲解了using的用途,以及WCF服务的配置、发布和客户端引用服务端的方法。同时,还涉及到了数据返回页面的实现,如账号密码验证和跨窗口数据传递。

C#WPF 项目开发(二)(火车订票系统)

一、Service(服务层)布局
1.服务端连接数据库
(1)、数据库连接字符串,Sqlserver数据库连接方式有多种,这里只介绍最常用的通过SqlConnection和Sqlserver数据库用户名和密码验证来进行操作数据库,这里data source 是指“Microsoft SQL Server Management Studio 18 (SQL 2019)”登录进去的数据库地址和端口号,需要注意的是地址和端口号之间是用","进行分隔的;initial catalog 是项目数据库名字 ;user id和pwd分别指用户名和密码。
在这里插入图片描述
(2)、封装一个方法,该方法有返回值,返回的是一个数据缓存,然后把查询到的数据返回到数据缓存中。
(3)、操作数据库里的存储过程,而存储过程里有很多参数,所以该查询需要接收两个参数,(String sql, SqlParameter[] param)一个参数是存储过程的名称,一个参数是批量的参数,批量参数使用“数组”,该数组表示int类型也不是String类型,而是“对象数组”存放参数,因为查询的是一个数据表所以使用“DataSet”类型。
在这里插入图片描述
(4)、进行新增、修改、删除,因为都是一行受影响,返回的是一个数值,所以使用的是int类型,声明一个变量初始化为0,如果执行没有成功就返回0行受影响,ExecuteNonQuery()执行更新后的数据进行插入。
在这里插入图片描述
2.在C# 中 using的用途主要有三个
(1)、第一个是 引用命名空间,页面头部经常见。
在这里插入图片描述
(2)、第二个是 为命名空间或类型创建别名。这称为“using 别名指令”。
在这里插入图片描述
、当使用 IDisposable 对象时,应在 using 语句中声明和实例化此对象,using 语句按照正确的方式调用对象上的 Dispose 方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身离开作用域,在 using 块中,对象是只读的并且无法修改或重新赋值,using 语句确保即使在调用对象上的方法时发生异常Dispose方法也会被调用。可通过将对象放入 try 块中并在finally 块中调用Dispose来达到同样的结果;实际上,这就是编译器转换 using 语句的方式。前面的代码示例在编译时将扩展为以下代码(请注意,使用额外的大括号为对象创建限制范围),换句话说就是 using 块里边的代码 掉在使用using之后,运行超出using 域后,变量(连接)在内存中会被释掉(非托管) 这样有两点好处,第一是 比较安全,即使有异常 也不会导致一直连接数据库等(当时看严峻的代码之后发现的),第二点是开速释放掉内存之后 ,提高代码效率 。
在这里插入图片描述
(4)、在客户端中把WCF设置为启动项目,(鼠标右键–>设为启动项目)。
在这里插入图片描述
(5)、数据的访问是层级调用关系:DAL 数据访问层–>BLL 业务逻辑层–>DALMethod.cs (操作数据库)–>WcfService 使用WCF 服务应用程序,所以要在BLL引用中引用DAL,
在这里插入图片描述
(6)、在WcfService 使用WCF 服务应用程序引用BLL层。
在这里插入图片描述
3、业务层页面布局
(1)、在BLL 业务逻辑层里的默认类中把名字改成系统需要的登录页面名称,进行业务逻辑层的编写,引用两个需要的命名空间,同时还要引用一个服务层开启的程序集契约,并且在类的头部用中括号把类写成一个服务协议“ServiceContract”代表是一个接口或者类,指示接口或类在WCF应用程序中定义服务协定。
在这里插入图片描述在这里插入图片描述

(2)、在服务端里做逻辑处理,需要操作的是(SQL)数据库里存储过程的存储语句。
在这里插入图片描述
(3)、进行(SQL)数据库的操作,因为数据的查询,增、删、查、改都放在了DAL 数据访问层的“DALMethod.cs (操作数据库)”中,使用需要在BLL 业务逻辑层里的“WDLogin.cs”中实例化DAL数据访问层的“DALMethod.cs (操作数据库)”中的数据查询数据层。
在这里插入图片描述
(4)、设计操作方法,方法名称和数据库存储语句名称保持一致方便后续维护更好查找,对象数组初始化,调用DAL中“DALMethod.cs (操作数据库)”的查询数据缓存,因为strAccount(账号)、strPassword(密码)两个对象数值来源于页面,所以在方法里赋值,同时给对象数组赋值。
在这里插入图片描述
4.配置WPF服务
(1)、在WcfService 使用WCF 服务应用程序里找到“Web.config”文件,鼠标右键–>编辑WCF配置,在高级中找到“服务行为”把“空名称”名字修改为BLL,而修改的文件名中包含“serviceMetadata”和“serviceDebug”两个服务行为,把“serviceMetadata”中第二个true更改为false,把“serviceDebug”中第三个false更改为true。
在这里插入图片描述
(2)、找到“服务”>新建服务>浏览目录==>点击文件夹上一级按钮==>点击BLL==>bin==>Debug==>BLL.dll==>BLL.WDLogin。
在这里插入图片描述
(3)、找到目录之后,点击确定然后默认下一步操作,到“终节点的地址”把http://地址删除,然后进行下一步操作,此时出现警告弹窗,点击“是”,这样新建的服务完成。
在这里插入图片描述
(4)、在新建的服务里找到“终节点”把其中的“空名称”文件命名为和服务名称相同==>点击新建的服务==>常规==>引用BLL。
在这里插入图片描述
5.发布服务
(1)、在“高级”中找到“宿主环境”>“serviceActivations”>新建==>“RelativeAddress”后面添加服务名称为:“BLL.WDLogin.svc”==>“Service”后面添加服务名称为:“BLL.WDLogin”,这样服务的相对地址就是:“BLL.WDLogin.svc”服务为:“BLL.WDLogin”,分布好服务后检查一下是否分布成功,启动项目跳转到浏览器起始地址为:http://localhost:2130这时候在地址后面添加相对地址:/BLL.WDLogin.svc,最好地址:http://localhost:2130/BLL.WDLogin.svc。
在这里插入图片描述
6.客户端引用服务端。
(1)、在客户端的引用上鼠标右键“添加服务引用”把WDLogin服务在浏览器上的地址复制过来,在地址栏中粘贴点击“转到”测试服务是否发布,并且命名空间中进行命名,此次命名使用服务的命名方便后续查找和调用。
在这里插入图片描述
(2)、此时在客户端的引用上会出现一个服务,里面是服务的命名空间,相当于把服务端的服务变成命名空间使用,然后通过实例化命名空间的方式直接调用服务层的方法。
在这里插入图片描述
五、数据返回页面
1.(1)、在客户端的登录页面后台页面中实例化服务器查询服务,获取账号和密码,账号和密码从页面上获取,所以在执行之前先获取到页面上的数据,首先获取页面上的账号和密码,由于客户端登录页面前台页面的账号和密码控件都赋值了名字,所以可以直接通过Name值获取其名字。
在这里插入图片描述
(2)、在数据验证登录之前需要判断账号密码是否正确,弹出框书写为“MessageBoxButton”参数为“是(yes)”和“否(no)”,“MessageBoxImage”指示消息框中显示的图标,
如果账号密码不为空则获取到数据,判断为账号密码不为空之后还要进行判断该账号和密码能否查询到数据,判断依据为是否有函数或返回数据大于0,数据正确之后进行页面跳转,跳转之前还得进行部门和名称的获取。
在这里插入图片描述
(3)、跨窗口传递数据
获取的数据传递到窗口,需要通过跨窗口传递数据,两种方式:第一种直接把需要传递的参数放到构造函数里通过构造函数直接传递,第二种把要的参数声明成公共静态变量,公共变量一般用于多个窗口的调用,现在我们只需要把需要的账号密码传递到一个窗口,所以使用
构造函数进行传递。
在这里插入图片描述
(4)、检测服务端是否打开
在运行客户端的时候检测服务端是否打开,服务端没有打开数据库存储语句无法获取,通过检测到获取数据报错方式使错误时登录页面的透明度会变成全透明,获取描述当前异常的信息,如果检测到“无法连接到远程服务器”几个关键字则提示用户“服务器处于关闭状态,请启!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值