为什么要获得系统时间?
情景:
教师登陆系统需要向系统中添加工作记录。教师关闭系统也需要更新工作记录。当然还有教师在线期间的所有的操作都需要向数据库中存入时间。
当教师登陆系统向数据库中添加了工作记录其中包括登录时间,但随后有人更改了教师使用的计算机的时间。此后教师的所有操作也需要读取系统时间存入数据库。此时如果我们只用简单度语句
**time=Date.Now
读取系统时间存入数据库会导致教师登陆的时间晚于教师操作的时间。也就是说教师还没有登录系统就已经操作系统的灵异事件。
当然解决这个办法有两个最基本的方法:
- 网络时间。
- 读取服务器时间。
对于读取网络时间来说,就必须保证系统运行的环境是能访问外网的。对于部署在局域网的系统不适用。所以我们采用方法2.
读取服务器时间。很简单的代码实现:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim datetime As Date
conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB.1;Password=密码;Persist Security Info=True;User ID=用户名;Initial Catalog=数据库名;Data Source=服务器IP"
conn.Open()
rs = New ADODB.Recordset
rs.Open("SELECT GETDATE() AS SvrTime", conn, 1, 1)
datetime = rs.Fields("SvrTime").Value
MsgBox(datetime)'显示服务器时间
rs.Close()
conn.Close()
rs = Nothing
conn = Nothing
End Sub
End Class
上面的代码就可以实现了。但是对于使用三层架构编程来说这段代码当然是放在那呢。创建connection链接sqlhelper里完成的。D层直接访问SQLHelper、所以放在D层合适。(sqlhelper的使用不在累述)但是一般情况下在U层就需要把需要插入记录的实体类的所有字段赋值。(一般思路)
但是我又想了。我现在是以文档为基础,画好图,写的代码。这样需要改动的地方有很多了。有没有其他的方法呢。答案当然是有的。
方法1:
在涉及到插入记录中包括服务器时间时。查询工作放在D层。D曾直接调用D曾的方法,无需作为参数传递。这是最直接的方法。其实只是摆脱了思维定势。
方法2:
定义触发器,当需要插入一条信息时对于需要插入时间的列自动插入系统时间。触发器代码如下:
ALTER TRIGGER [dbo].[InsertCard]
ON [dbo].[Card]
AFTER INSERT
AS
declare @CardNo int
declare @time varchar(50)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set @time= CONVERT(VARCHAR(50),GETDATE(),121)
select @CardNo =_CardNo from inserted
update Card set _CardStatic ='使用',_RegistDate =@time ,_RegistTime =@time ,_Status ='未结账' where _CardNo =@CardNo
END
缺点分析:
- 定义触发器对于数据库的依赖比较大。当需要更换数据库时需要在新的数据库中编写触发器。
- 定义的触发器一旦出现错误,无法在系统调试阶段给出准确的提示。排除错误需要一定的经验。
方法3:
在系统第一次运行的时候读取服务器时间。并开始一个timer,需要调用服务器时间时直接用第一次读到的时间加上timer走过的时间。所有的工作在U层完成。包括计算当前服务器时间,以及传参过程中对实体属性的赋值。
优点:摆脱了对数据库的依赖。
确定:每次调用服务器时间都要进行重新的计算而不是直接拿来用。
总结:以上只是个人的一些想法。不一定最好。只供参考,欢迎留下宝贵意见。
分享到:
相关推荐
机房收费系统的概要设计说明书,根据软件需求说明,建立目标系统的总体结构和模块间的联系;定义数据库和数据结构;定义目标系统的外部接口包括用户界面;设计系统的安全机制和出错处理机制;定义系统运行,制定组装...
机房收费管理系统,这是一份课程设计,使用的是C语言编程,里面除了有源代码之外还有很多总结和对于题目的分析。这很不错的参考资料
机房收费系统的详细设计阶段是设计的第二阶段,这阶段的主要任务是在概要设计的基础说明书的基础上,把概要设计阶段产生的功能模块进行过程描述,设计功能细节,为代码的编写提供必要说明
机房收费系统在详细设计过程中,需要做的文档
机房收费系统中进行概要设计时,所需要的文档
VB版机房收费系统,VB版机房收费系统,VB版机房收费系统,VB版机房收费系统,VB版机房收费系统,
在VS2013环境下,编写的C语言Windows程序设计,机房收费管理系统。代码仅仅使用C语言调用Windows API函数和MYSQL数据库专用库文件编写。有C语言基础的,简单易懂。代码没有优化,思路很清晰。没有省略的代码,我都...
在学校没事写的一个机房收费管理系统,带有使用说明视频,测试完美可用。
此机房收费系统的实现使用了vb.net+sql server。采用MVC三层架构,及一些设计模式,其设计采用UMl标准……
cards.txt 是存储上网卡记录用的 records.txt 是存储上网记录用的 初始都为空 ...list<type> A; 是用来创建一个类型为type的链表A A.push_back(t) 是把变量t存入链表 A.erase(t) 是把变量t删除 for(list<Card>::...
基于C语言实现dos界面简单的机房收费管理系统.zip 大学生课程设计 基于C语言的课程设计 自己大二写的课程设计
机房收费管理系统 主要功能模块: (1) 登录模块 (2) 上机管理模块 说明:上机登记时,余额不足3元或卡处于挂失状态,则拒绝登记 每位同学的一次上机形成一条记录,每36S遍历一次上机记录表,对表中所有正上机...
弱电系统设计方案——消防监控机房工程装修方案
vb版,机房收费系统
基于C的机房收费管理系统,满足课程设计的基本要求,简单易懂
一个详细的需求分析报告,以人们熟悉的机房收费系统为例,一个好的学习模板!!
使用C语言编写的一个简单的机房收费管理系统,使用VC++6.0平台进行开发。资源内的工程可在安装了VC++6.0(或更高版本)的机器上直接打开运行。
大型数据库课程设计报告——机房管理系统.pdf大型数据库课程设计报告——机房管理系统.pdf大型数据库课程设计报告——机房管理系统.pdf大型数据库课程设计报告——机房管理系统.pdf大型数据库课程设计报告——机房...
大型数据库课程设计报告——机房管理系统.docx大型数据库课程设计报告——机房管理系统.docx大型数据库课程设计报告——机房管理系统.docx大型数据库课程设计报告——机房管理系统.docx大型数据库课程设计报告——...
机房收费系统在需要进行需求分析时需写的文档