基于RFID的门禁管理系统(共36页)_第1页
基于RFID的门禁管理系统(共36页)_第2页
基于RFID的门禁管理系统(共36页)_第3页
基于RFID的门禁管理系统(共36页)_第4页
基于RFID的门禁管理系统(共36页)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上课程设计任务书 学 院计算机与信息工程学院专 业物联网工程课程名称RFID条码与技术题 目基于RFID的门禁管理系统完成期限自2015年12月23日至2016年1月5日共两周内容及任务1、 项目的目的 系统学习Microsoft Visual Stdio 2010开发环境及设计语言,学习Microsoft SQL Server 2008开发环境及设计语言;研究基于ISO15693协议开发的应用,研究RFID技术在实际生活中的具体应用;综合利用上述知识,实现对标签写入人员信息、自动识别人员信息、对非法人员发出警报并显示门的开关状态等功能。2、 项目任务的主要内容和要求1

2、、 任务内容 设计一套基于RFID的门禁系统,利用RFID技术,实现对标签写入人员信息、自动识别人员信息、对非法人员发出警报并显示门的开关状态等功能。2、 任务要求 该系统能够完成人员信息的写入、对信息的自动识别、监控是否有非法人员闯入和介绍实验室的语言播报。3、 项目设计(研究)思路系统主要包括硬件电路连接和软件模块的设计。硬件电路连接部分,主要是将RFID实验箱中的ISO15693M模块通过串口线连接到PC端,进行数据的传输。软件模块部分,主要是利用Microsoft Visual Stdio 2010开发环境来完成软件界面的设计,达到写入、监控、识别的目的;另外还用到了Microsoft

3、 SQL Server 2008数据库开发环境,保存人员的相关信息。四、具体成果形式和要求1、符合设计要求的可展示的硬件,软件系统;2、各项设计功能满足设计需求,功能完成且运行流畅;、3、系统使用说明及设计报告。专心-专注-专业进度安排起止日期工作内容12.23-12.25搜集相关资料,准备实验相关物品以及对应软件工具12.26-1.4学习Microsoft Visual Stdio 2010和Microsoft SQL Server 2008开发环境及设计语言,进行设计的硬件搭建,数据库建立,界面设计1.5项目验收和答辩主要参考资料1孙三才,许熏伊.精通C#与ASP.net程序设计M.北京:

4、中国铁道出版社,2003:37-46 2华国栋,刘文予.基于ADO.NET的数据库访问及其性能优化J.电脑知识与技术学术交流,2007(09):20-213朱印红,苏振巍. ASP.NET+SQL Serve网站模块化开发全程实录. 北京:清华大学出版社,2009.7 4常永英.ASP.NET程序设计教程:C#版.北京:机械工业出版社,2009.95李书涛.SQL Server语言程序设计教程.北京:北京理工大学出版社,1993:65-70. 指导教师意见(签字): 年 月 日系(教研室)主任意见(签字): 年 月 日课程设计说明书 学院名称: 计算机与信息工程学院 班级名

5、称: 物联网工程 学生姓名: 学 号: 题 目: 基于RFID的门禁管理系统 指导教师: 起止日期: 2015年12月23 -2016年1月5日 目录0一、绪论 1.1 引言 射频识别(Radio Frequency Identification,RFID)技术是从20世纪80年代开始走向成熟的一项自动识别技术,是当前最受人们关注的热点之一,该项技术既传统也充满新意和活力。射频识别是无线电识别的简称,它源于无线电通信技术,综合了现代计算机智能控制、智能识别、计算机网络等高新技术,顺应了计算机集成制造系统,电子商务等热点应用的发展需要。射频识别应用电磁场,以非接触、无视觉、高

6、可靠的方式传递特定识别信息,由于大规模集成电路技术的日益成熟,使得射频识别系统的体积大大减少,从而进入了实用化阶段。 射频识别技术具有工作距离大、信息收集处理快捷及较好的环境适应性等优点, 极大地加速了有关信息的采集和处理,在近年来获得了极为迅速的发展。随着科技的发展,人们开始追求智能化的生活,而门禁系统则是生活中非常实用的系统,在这个即要求效率又要求安全的需求下,门禁系统将逐渐走进人们的生活。随着建设的发展,公司、工厂、学校都安装了门禁系统。门禁系统的普及率快速增长,由于其安全和便捷使得门禁系统得到了用户的认可。但系统可能还不够完善,存在某些不够人性化的方面。如果技术足够

7、成熟,系统足够健壮那么会得到广大用户的实用。针对社会发展的需求和面临的问题结合RFID技术,设计并实现基于RFID的门禁管理系统,实现人员信息的录入、人员识别、陌生人警报等。 二、相关知识2.1 ISO15693协议ISO15693是针对射频识别应用的一个国际标准,该标准定义了工作在13.56Mhz下智能标签和读写器的空气接口及数据通信规范,符合此标准的标签最远识读距离达到2米。2.1.1 ISO15693标准相关指令简介在RFID_Reader PC机软件控制下可执行ISO15693标准相关指令,其必备指令和常用可选指令一共有15个。指令定义如下表2-1所示,具体如下:表2-1 指令定义Co

8、mmand CodeMethodDiscription01InventoryAnti-Collision: Check RF field and read all UIDs of RFID tags. Uses Inventory command.02Stay QuietStay Quiet: Put a specific tag into quiet state. Tags in quiet state will not reply to inventory command.03SelectSelect: Put a specific tag into selected state. Tag

9、s in selected state will only reply to commands with select bit on.04Reset To ReadyReset To Ready: Put all tags in the initial ready state. All tags are in ready state when they first enter the RF field.05Write AFIWrite AFI Byte: Changing the AFI byte of tag(s) to a new value.06Lock AFILock AFI Byte

10、: Disallowing future changing of tag(s) AFI value07Read Single BlockRead Single Block: Read the data stored in tag(s) single block. 08Write Single BlockWrite Single Block: Write user data into tag(s) single block 09Lock BlockLock Single Block: Disallow future writing into selected tag(s) single bloc

11、k.0ARead Multi BlockRead Multi Block: Read the data stored in tag(s) multi block. 0BWrite Multi BlockWrite Multi Block: Write user data into tag(s) multi block0CWrite DSFIDWrite DSFID: Write a new DSFID byte value into tag(s).0DLock DSFIDLock DSFID: Disallow changing of DSFID byte value in the futur

12、e for tag(s).0EGet System InfoGet System Information: Get tag information (e.g. manufacturer, size, etc) from tag.0FGet Multi Block Security StatusGet Multiple Block Security Status: Get the security status of block(s) from tag(s). 2.1.2 相关说明对命令功能通俗的描述和使用相关要求如下:01(Inventory)指令:强制的指令,对应ISO15693标准的0x0

13、1指令;读取RF场强范围内处于激活状态的RFID标签。根据相应的标志,可以只读取单个标签,也可以读取多个标签,执行防冲突功能,理论上可以一次读出所有处于激活状态的标签。02(Stay Quiet):强制的指令,对应ISO15693标准的0x02指令;使激活的标签进入静默状态。一次只能对单个标签操作,且必须跟在同一个标签的01(Inventory)指令之后。本系统的开发就是基于ISO15693协议,其中主要使用了Inventory方法,就行寻卡的操作,进行功能的实现。2.2 Microsoft Visual Stdio 2010开发环境Visual Studio 可以用来创建Windows平台下

14、的 Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office插件。.NET 的通用语言框架机制(Common Language Runtime, CLR),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。高效的开发环境Microsoft Visual Studio 2010 采用拖曳式便能完成软件的开发。简简单单的操作便可以实现一个界面的生成。本系统就是利用Microsoft Visual Studio 2010开发环境中的Winform开发模板,进行系统控制界面的开发。2.3 M

15、icrosoft SQL Server 2008开发环境SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。SQL Server 是一个关系数据库管理系统。该系统具有以下特点:Ø 安全性:可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。Ø 高效性:可以降低开发和管理他们的数据基础设施的时间和成本

16、。Ø 智能性:提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。所以本系统就采用了Microsoft SQL Server 2008开发环境作为用户相关信息的数据库保存体,用来方便快捷的获取到用户的信息。3、 概要设计3.1 总体设计3.1.1 需求规定利用RFID技术,实现对标签写入用户信息、对用户信息的识别与监控。标签写入学用户信息,通过读取标签,将获取的标签号,写入数据库,同时跟此标签编号对应的还有用户姓名,单位名称,联系电话等信息也同时写进数据库的一张表中。也就是说,实际上标签里没有存储关于用户的任何信息,所有的信息都存放在数据库中。门禁监视,读到的RFID标

17、签的编号,根据该编号从数据库中读出该用户的信息显示在界面上,并且欢迎该用户;若数据库中没有该便签编号,界面上显示为“无效卡”,发出警报信息提示出示有效证件。3.1.2 运行环境操作系统:Windows 7 操作系统软件环境:Microsoft Visual Stdio 2010开发环境+SQL Server 2008数据库硬件环境:RFID系统实验箱3.1.3 基本设计概念本系统的设计由UI层,逻辑层和数据库层三部分组成,如表3-1所示:表3-1 三层架构UI层(C#)逻辑层(标签写入用户信息,修改信息,门禁监视功能)数据库层(保存信息)l UI层:完成PC端的控制界面,完成与用户之间的交互l

18、 逻辑层:具体的功能实现层,完成具体的功能,与用户界面进行衔接l 数据库层:保存关于人员的相关信息,包括卡的编号、用户姓名、单位名称本系统的设计概念就是将代码与界面分开,既保证用户的良好的交互也保证数据的分离,达到方便、快捷的目的。3.1.4 系统流程该门禁管理系统,系统运行时,主要有以下步骤:1 先选择串口号以及波特率,接着进行打开串口;2 为某一个用户录入信息,选取一张白卡,读出卡号,填写用户的信息,点击保存按钮,数据成功保存至数据库,同样的方法,将要进入该房间的用户的姓名、单位名称、联系电话、称谓以及用户照片都添加到数据库进行保存;3 用户刷卡进入某房间,已成功注册的用户可以进入房间,系

19、统根据用户所持卡的编号查询出用户的信息,显示在系统界面,欢迎用户进入,如果用户持未注册的卡刷卡进入房间,则系统界面上回显示该卡无无效卡,并发出警报;注:1).修改已注册的用户信息,若发现已注册的用户信息有误,可进行修改用户信息或者删除用户信息和所持卡的卡号。2).点击界面上的实验室介绍,语音播报实验室介绍。3.1.5 人工处理的部分在本系统中,需要人工处理的部分,主要是读卡时,将用户的相关信息与卡片绑定,然后存入数据库,可省去用户进入房间的相关行为,使进入房间的过程更加便捷,也使管理人员可以更容易的统计相关信息。3.2 接口设计3.2.1 用户接口用户接口是为了方便用户与计算机应用交流的窗口,

20、通过接口,用户可以操作使用应用程序,本系统中,使用者可以添加用户的信息,可以对用户进入房间进行门禁监视,也可以查看对房间(实验室等)的介绍或者注意事项。 3.2.2 外部接口本系统中的外部接口主要是指PC端的串口与RFID实验箱上的串口进行连接,设置波特率等基本的连接操作。3.2.3 内部接口内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参数的结构将在下面数据结构设计的内容中说明。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。3.3 系统数据结构设计3.3.1 物理结构设计的要点物理数据结构设计主要是设计数据在模块中的表示形式

21、。数据在模块中都是以结构的方式表示。用户的信息表名:tb1_UserInfo表的属性:TagNumber(卡的编号),UserName(用户姓名),UserCompany(单位名称),UserAppellative(习惯称谓),UserTelephone(联系电话),UserPhoto(用户照片)。 3.3.2 数据结构与程序的关系通过定义用户的数据表,在程序中可通过SQL语句对数据表进行基本的增删改查操作。在后台对用户进行数据库添加、修改、删除等都要对数据表进行操作。以及自动读卡阶段,要从数据库中提取信息,然后将信息显示出来。4、 详细设计4.1 系统流程图该系统的运行过程,先打开串口,然后

22、进行读卡操作,修改数据库信息,最后进行门禁监视的功能,本系统的详细流程图如下图4-1所示:开始打开串口 F T读卡浏览清除删除修改添加数据库自动读卡是否在数据库中 F T通过 关闭串口结束 图4-1 系统流程图4.2 打开串口的程序说明打开串口的程序主要是靠按钮btn_Open_Demo的事件触发程序来打开串口,其中程序中主要是靠reader.OpenSerialPort这个函数来实现对串口以及波特率的选择操作,具体的程序代码见附录btn_Open_Demo_Click函数。可以通过重置按钮来清除串口和波特率的文本框中的数据,重置的程序主要是靠按钮btn_Refresh_Demo 的事件触发程

23、序来清除数据,其中程序中主要是靠btn_Refresh_Demo_Click来实现的,具体代码见附录btn_Refresh_Demo_Click函数。4.3 读卡的程序说明读卡的程序主要是通过读卡按钮btn_InventoryDemo的事件触发程序来进行读卡的操作,在事件触发程序中,主要用到了Inventory函数用来进行寻卡操作,可以将读卡器上放置的所有卡片都读取出来,具体的程序代码见附录btn_InventoryDemo_Click函数。4.4 增加、删除、修改的程序说明在读出卡的编号之后,增加、删除、修改的程序也主要是通过按钮btn_Add、btn_Modify、btn_Delete的事

24、件触发程序来进行对用户的相关信息进行操作,其中主要是用到了SQL语句进行增加、删除、修改的操作,具体的程序代码见附录btn_Add_Click、btn_Modify_Click、btn_Delete_Click函数。4.5 自动读卡的程序说明在门禁监视程序中还有语音选项,选择语音选项,则可以有语音提示。其中自动读卡的程序,也主要是是通过按钮btn_Monitor的事件触发程序来进行读卡的操作,其中用到了线程Monitor函数,是读卡器能都不间断的进行读卡操作,具体的代码见附录btn_Monitor_Click函数和Monitor_Click函数。语音提示的程序,主要是通过chk_Voice的触

25、发来进行语音的提示,具体的代码见附录chk_Voice.Checked中。5、 系统测试基于上述的思路,本小组开发出来的系统界面如下图5-1所示: 图 5-1 RFID门禁管理系统界面从上述的图片中可以看出,本界面的主要分区,第一分区是串口的分区,包括选择串口以及设置波特率;第二分区主要是初始化卡片的分区,包括读卡操作、添加、修改、删除、清除、浏览等操作;第三分区主要是门禁监视的分区,包括自动读卡的操作,以及语音的功能操作。5.1 串口的测试当利用RFID实验箱与PC端的串口进行连接时,通过查看本机的设备管理器,查看对应的串口号,查看的结果如下图5-2所示: 图 5-2 串口的查看2 当串口选

26、择之后,在串口分区中,选择正确的串口,然后设置波特率,这里程序中自动将波特率设置为;3 串口打开成功,在ListBox控件中,显示出来串口打开成功提示信息,具体的显示如下图5-3所示; 图5-3 串口打开提示信息5.2 初始化卡片本功能分区中的主要功能有读卡的功能、添加、修改、删除等功能。具体的图示见图5-1所示。5.2.1 读卡当点击读卡按钮时,触发读卡按钮的事件处理程序,此时放置两张卡片在读写器上,可读取出来卡片的编号,具体如图5-4所示。图5-4 读卡的示意图从上述图中可以看出,放置的两张白卡,下面ListBox中显示出来了读取到的卡片的数量,同时也读取出来了卡的编号,在下拉框中可以选择

27、不同的卡片编号,进行添加用户姓名以及单位名称,完善用户的基本信息。5.2.2 添加当读取到白卡的编号时,在下面的TextBlock文本框中,填入用户姓名以及单位名称等,点击添加按钮,信息将自动保存到数据库tb1_UserInfo表中,以此类推,再放置两张白卡,完善三张卡片所对应的用户信息,以及后续的使用,数据库中tb1_UserInfo中的信息保存如下图5-5所示。图5-5 数据库用户信息从图中可以看出数据库中保存了卡片的卡号、用户姓名以及单位名称等信息。5.2.3 修改当想修改一张卡片所对应的习惯称谓等信息时,可以将卡片放置在读卡器上,点击读卡,此时界面上将显示出来卡片所对应的信息,在Tex

28、tBlock文本框中,可以直接更改卡片所对应的习惯称谓等信息,然后再点击修改按钮,即可完成修改信息的功能,若修改成功,会在下方的ListBox中提示修改成功。修改之前,放置卡片,界面显示如下如5-6所示;图5-6修改之前修改之后,例如习惯称谓王二,改为老王,然后点击修改按钮,结果如下图5-7所示;图5-7 修改之后从上述图片中,可以看出来,已将习惯称谓更改,且更改成功,在数据库中进行查看习惯称谓的信息,此时的信息显示如下图5-8所示; 图 5-8 修改之后的数据库从数据库中的信息来看,卡片所对应的信息已经改变,完成了修改的功能。5.2.4 删除当某一用户已经不在被允许进入时,则可以选择删除按钮

29、进行操作,删除掉数据库中关于某一用户的信息。放置一张卡片,如赵四的卡片,点击删除按钮,然后查看数据库中的信息,查看信息是否被删除,具体数据库中信息如下图5-9所示; 图5-9 删除用户后的数据库从上述图片上,可以看出此时用户赵四已经不在数据库中,已删除成功。5.3 门禁监视门禁监视分区主要是完成自动读卡,语音提示的功能操作。当卡片放到读卡器上时,自动读取卡片内的信息,读取处卡片的编号、用户姓名、单位名称、联系电话和照片。当选择了语音后,自动寻卡时会有语音提示“欢迎您某某”,如果为非数据库中卡则会提示“请您出示有效证件”,界面显示如下图5-10所示; 图5-10 读无效卡时的门禁显示5.3.1

30、自动读卡点击Start Monitor按钮,开启自动读卡模式,接着把卡放在读卡器上,进行读卡,完成读卡动作。例如,选择张三的卡片,自动读卡时,读取到张三的单位名称,联系电话,照片等信息;此时界面上的显示为图5-11所示。 图5-11 自动读卡在用户进入时,在读卡器上放上数据库中存在的卡,则可以看到卡片的编号和用户姓名等信息。5.3.2 语音勾选语音,自动寻卡时会有语音提示,如果为数据库中存在的卡则会有“欢迎您某某”的语音提示,如果为数据库中不存在的卡则会提示“请您出示有效证件”并显示无效卡;界面如下图5-12所示: 图5-12 打开语音界面综上所示,串口的连接、初始化卡片、门禁监视三个分区分别

31、实现了不同的功能需求,基本上满足了项目的基本需求,完成了人员信息的写入、对信息的自动识别、监控是否有非法人员闯入和介绍实验室的语言播报的功能,且测试成功,系统基本完成。6、 结论通过这次的RFID原理与应用的课程设计的学习,在这门禁管理系统中,能够实现将用户的信息进行快速的识别和准确的存储。通过本次的学习了解到了RFID的工作原理和技术特点,进而做出了基于RFID的门禁管理系统的设计和实现。用户信息录入门禁系统的数据库后,用户可以将卡放在读卡器上,如果是数据库中存在的用户,这打开门,让用户进入,如果卡片为数据库中没有的,那么将进入不了,并且发出警报,提示处事有效证件。并显示信息无效。并且可以实

32、现用户的增加和删除,错误的信息也可以修改,用户还可以提交自己的相片。经过我们小组成员的不断努力,该系统虽然实现了门禁管理系统的基本功能,但还有很多的不足之处。比如,如果用户卡丢失了,怎么通过别的方式进入房间,预想方案有,通过输入密码进入,或者通过上传的照片进行人脸识别。但是现在还不能完成,希望在以后的不断地学习中能够更加完善该门禁管理系统的功能。附录打开串口的程序代码如下所示: private void btn_Open_Demo_Click(object sender, EventArgs e) if (!reader.IsOpen) if (cmb_PortName_Demo.Select

33、edIndex < 0) AddInfoDemo(String.Format("错误:请您选择要打开的串口!"); cmb_PortName_Demo.Focus(); return; if (cmb_PortName_Demo.SelectedIndex < 0) AddInfoDemo(String.Format("错误:请您选择要使用的波特率!"); cmb_PortName_Demo.Focus(); return; String PortName = cmb_PortName_Demo.SelectedItem.ToString()

34、; Int32 BaudRate = ;/ Int32.Parse(cmb_BaudRate.Text.Trim(); Byte value = reader.OpenSerialPort(PortName, BaudRate); if (value = 0x00) AddInfoDemo(String.Format("串口0打开成功!", PortName); else AddInfoDemo(String.Format("错误:串口0打开失败!", PortName); else AddInfoDemo(String.Format("错误:

35、串口已经处于打开状态!"); 重置的程序代码如下所示:private void btn_Refresh_Demo_Click(object sender, EventArgs e) cmb_PortName_Demo.Text = "" cmb_BaudRate_Demo.Text = "" 读卡的程序代码如下所示:private void btn_InventoryDemo_Click(object sender, EventArgs e) if (!reader.IsOpen) AddInfoDemo("请先打开串口。"

36、); return; Int32 TagCount = 0x00; String TagNumbers = new String0; Byte result = reader.Inventory(ModulateMethod.FSK, InventoryModel.Multiple, ref TagCount, ref TagNumbers); /Byte result = reader.GetAllTagsNum(out TagCount, out TagNumbers); if (result = 0x00) AddInfoDemo(String.Format("Inventor

37、y命令执行成功,读取到的卡片数量为:0。", TagCount); else AddInfoDemo(String.Format("Inventory命令执行失败,失败代码0。", result); return; if (TagCount > 0) cmb_TagNumbers.Items.Clear(); for (Int32 i = 0; i < TagNumbers.Length; i+) cmb_TagNumbers.Items.Add(TagNumbersi); cmb_TagNumbers.SelectedIndex = 0; 添加功能的

38、程序代码如下所示: private void btn_Add_Click(object sender, EventArgs e) if (txt_UserName.Text.Trim().Length < 1) AddInfoDemo("请填写用户姓名。"); txt_UserName.Focus(); if (txt_UserCompany.Text.Trim().Length < 1) AddInfoDemo("请填写公司名称。"); txt_UserCompany.Focus(); if (txt_UserTelephone.Text.

39、Trim().Length < 1) AddInfoDemo("请填写联系电话。"); txt_UserTelephone.Focus(); if (txt_Appellative.Text.Trim().Length < 1) AddInfoDemo("请填写习惯称谓。"); txt_Appellative.Focus(); SqlParameter sp; if (pic_UserPhoto.ImageLocation = null) sp = new SqlParameter new SqlParameter("TagNumb

40、er", SqlDbType.NVarChar, 50), new SqlParameter("UserName", SqlDbType.NVarChar,50), new SqlParameter("UserCompany",SqlDbType.NVarChar,50), new SqlParameter("UserTelephone", SqlDbType.NVarChar, 50), new SqlParameter("UserAppellative", SqlDbType.NVarChar, 50

41、) ; else sp = new SqlParameter new SqlParameter("TagNumber", SqlDbType.NVarChar, 50), new SqlParameter("UserName", SqlDbType.NVarChar,50), new SqlParameter("UserCompany",SqlDbType.NVarChar,50), new SqlParameter("UserTelephone", SqlDbType.NVarChar, 50), new Sql

42、Parameter("UserAppellative", SqlDbType.NVarChar, 50), new SqlParameter("UserPhoto", SqlDbType.Image) ; sp0.Value = cmb_TagNumbers.SelectedItem.ToString().Trim(); sp1.Value = txt_UserName.Text.Trim(); sp2.Value = txt_UserCompany.Text.Trim(); sp3.Value = txt_UserTelephone.Text.Trim

43、(); sp4.Value = txt_Appellative.Text.Trim();/ rb_Male.Checked ? "先生" : "女士" if (pic_UserPhoto.ImageLocation != null) Byte imagedata; using (FileStream fs = new FileStream(pic_UserPhoto.ImageLocation, FileMode.Open) imagedata = new Bytefs.Length; fs.Read(imagedata, 0, imagedata.Le

44、ngth); fs.Close(); sp5.Value = imagedata; Int32 count; if (pic_UserPhoto.ImageLocation = null) count = SqlHelper.ExecuteNonQuery(SqlHelper.CONSTRING, CommandType.Text, "Insert Into tbl_UserInfo (TagNumber,UserName,UserCompany,UserTelephone,UserAppellative) Values(TagNumber,UserName,UserCompany,

45、UserTelephone,UserAppellative)", sp); else count = SqlHelper.ExecuteNonQuery(SqlHelper.CONSTRING, CommandType.Text,"Insert Into tbl_UserInfo (TagNumber,UserName,UserCompany,UserTelephone,UserAppellative,UserPhoto) Values(TagNumber,UserName,UserCompany,UserTelephone,UserAppellative,UserPhot

46、o)", sp); if (count > 0) AddInfoDemo("添加成功。"); btn_InventoryDemo_Click(sender, e); else AddInfoDemo("添加失败。"); 修改功能的程序代码如下所示: private void btn_Modify_Click(object sender, EventArgs e) if (cmb_TagNumbers.SelectedIndex < 0) AddInfoDemo("请选择要修改的用户"); cmb_TagNumbers.Focus(); return; if (txt_UserName.Text.Trim().Length < 1) AddInfoDemo("请填写用户姓名。"); txt_UserName.Focus(); if (txt_UserCompany.Text.Trim().Length < 1) AddInfoDemo("请填写公司名称。"); tx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论