客户关系管理系统的设计_第1页
客户关系管理系统的设计_第2页
客户关系管理系统的设计_第3页
客户关系管理系统的设计_第4页
客户关系管理系统的设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、第15章客户关系管理系统CRM的设计CRM的英文是 Customer Relationship Management ,中文为“客户关系管理" 。CRM软 件的主要目的就是通过对客户详细资料的深入分析,来提高客户满意程度,从而提高企业的竞争力的一种手段。网络时代的客户关系管理是利用现代信息手段,在企业与用户之间建立一种实时的交互管理系统。本章主要讲解客户关系管理系统的设计,设计流程如图15-1所示。客户关系管理系统设计流程图图15-1客户关系管理系统设计流程15.1 CRM的分类和价值体现15.1.1 CRM的分类CRM系统有三种类型:操作型、分析型和协同型。(1)操作型CRM:主要

2、方便与客户的交流,简化操作流程。利用业务系统以及渠道系 统收集的客户信息,进行深层次的挖掘,提升系统的业务价值。(2)分析型CRM : 了解客户的需求,比如新业务有没有客户群、如何吸引他们、如何 创造更高价值、潜在客户群是什么类型等等。分析型 CRM强调对各种数据的分析,并 从中获得有价值的信息。其主要包括的模块类型应为客户分析、客户分析、数据管理和市场定向,核心是分析已发生的事情,同时根据历史数据和数据挖掘技术,预测即将发生的事情。(3)协同型CRM :整合各种职能,协调各个部门之间的联系。协同型CRM其实可以算是辅助型软件,主要实现的是数据共享和业务协同。CRM软件系统主要表现在这三个层面

3、:第一层操作型CRM ;第二层分析型 CRM ;第三层协同型CRM。15.1.2 CRM的价值体现CRM 的价值主要体现在:( 1)通过对用户信息资源的整合,在企业内部达到资源共享,从而为客户提供更快速周到的优质服务,吸引和保持更多的客户。( 2)通过对业务流程的重新设计,更有效地管理客户关系,降低企业成本。( 3)通过满足客户的个性需求,提高客户的忠诚度和保有率。( 4)根据对客户特征、购买行为和价值取向的深入分析,为企业的决策提供科学、量化的指导。( 5)客户及其所有关联信息,均得到合理的分类和管理。( 6)分析竞争对手,改善客户关系,增加企业收益。企业根据CRM 的分类和价值体现体现,选

4、择合适的客户关系管理软件。15.2 企业的 CRM 需求分析一个软件的成功离不开一个好的需求分析,其处于软件开发的初期阶段,直接影响到后期的模块设计。15.2.1 企业的需求列表本例的客户关系管理系统,是为中小型软件公司定制的一款操作型CRM 。软件公司结合自身业务特点,提出了下列需求:( 1)详细的客户资料库,并能实现按照不同信息进行查询,允许添加、修改。( 2)客户按照不同地域划分。地域主要分为5 大区域:华东、华北、东北、西北、华南,每个区域下面包含几个主要的一级城市。( 3)客户分为三种状态:已签约、跟进、终止合同。( 4)客户分为不同的等级:有效客户、潜在客户、意向客户。( 5)公司

5、内部部门列表,并能列出部门内部的人员。( 6)公司竞争对手资料库,允许实现查找、添加等功能。( 7)允许公司成员随时都能查看公告。允许任何人发布公告信息。( 8)公司成员根据每天的工作情况填写工作日志。( 9)销售人员每天将联系的用户信息登记到联系记录表。( 10)实施人员每周提交自己的工作任务和计划。( 11)专门设立投诉功能,处理用户的投诉信息,并有相应的回访记录。( 12) 专门设立用户需求库,处理用户需要的功能列表。开发人员要每天查看,并由具体负责人给出处理意见。( 13)实施人员每次实施完毕后,要登记实施记录表,并填写实施总结。( 14) 客户资料库的联系人和电话要求是客户公司信息,

6、可单独建立联系人资料库,记录所有与公司有关系的人的资料。项目经理或者系统分析员以Excel 表的形式,罗列出用户的所有需求,上报给开发项目组讨论。15.2.2 分析企业的需求项目经理根据呈报的用户需求列表,召集项目组成员,安排项目的分工情况,由项目小组组长主持需求分析的会议。仔细分析需求列表中的每一条,不明白的地方,要提出来大家分析,并做会议记录,由分析人员去跟用户确认。下面列表体现分析时的不确定因素:( 1)详细的客户资料。详细到什么程度,主要包括客户的哪些信息?( 2) 5 大区域是固定在数据库中的信息,还是允许用户自定义。( 3)发布公告信息的需求是否与当前OA 系统冲突。( 4)是否由

7、专人处理客户的投诉信息。( 5)权限的主要划分依据是什么?( 6)与其他现存系统是否挂钩?( 7)数据库的选择标准,是否根据已有硬件系统决定。以上只是列出了需求分析的一些比较浅显的内容,在实际业务中,每一条需求都要仔细的斟酌,列出所有的疑问点,否则出现漏洞,引起用户不满或者程序返工,都将提高软件的工作成本。15.2.3 体验企业业务流程并确定最终需求根据需求分析会议讨论的内容和笔记,分析人员亲自到用户处,亲身体验企业的工作流程,与企业负责人员详细讨论每一条需求,并最终确定需求,与企业签定合同。CRM 系统需求的最终修改如下:( 1)详细的客户资料,包括客户名称、使用的软件版本、客户地址、客户的

8、行业类型、电话、主要联系人和客户所在区域。( 2) 5 大区域由用户自己添加,并可实现编辑。( 3) CRM 中不实现公告管理功能,OA 系统已经实现。( 4) 诉信息的处理,由投诉部人员决定( 5) 时不实现权限管理。( 6) 其他系统无任何联系。( 7) 据库使用SQL Server 系统。需求列表中的其他内容不变。确定需求后,开始设计系统的模块。15.3 系统模块设计需求分析之后,项目小组讨论需求的实现工具和方法,详细讨论需求并确定最终模块的划分。15.3.1 根据需求确定模块内容根据需求列表和功能相似的原则,将整个系统分成4 个模块:基础配置模块、客户管理模块、员工管理模块和客户服务管

9、理模块。下面具体介绍这些模块所包含的内容。(1)基础配置模块:主要包括一些系统需要的基础设置。有区域、客户等级、客户业务类型、客户状态和部门设置 5部分。公司主要有 4个部门:开发部、销售部、测试部和客 服部。模块的结构图如 15-2所示。图15-2 基础配置模块组成(2)客户管理模块:主要处理客户的一些资料,以及与公司有关系的一些联系人的信 息。该模块的结构如图15-3所示。图15-3 客户管理模块组成(3)成员管理模块:主要用于管理公司内部的人员。包括人员的基本资料、工作日志、任务计划等。该模块的结构如图15-4所示。图15-4 成员管理模块组成(4)客户服务管理模块:主要处理一些与客户沟

10、通的信息。包括客户需求的处理、客 户投诉的处理、客户实施记录、合同管理等,该模块的结构如图15-5所示。图15-5客户服务管理模块组成模块划分完毕后,根据模块的内容,进行类图的设计。15.3.2 分析功能模块弁设计类图在实际流程中,要求每个功能都设计一个类,通常称为面向对象设计。根据上一节中模块功能的介绍,现在为功能设计类,并以图形化的方式表示。(1)基础配置模块:基础配置模块完成一些必要的基本配置,功能相似,本实例设计 一个基础配置类,来实现其功能。基础配置模块的主要功能包括:添加区域、城市、获取区 域ID,添加客户等级、状态和业务类型,添加部门。为模块设计一个类,命名为BasicSet,图

11、15-6说明了类中的方法和方法的参数,其中还包括参数的类型。In表示是输入参数,out表示输出参数。BasicSet+AddArea(in areaname : string) : bool+AddCity(in cityname : string) : bool+GetAreaID(in areaname : string, out areaid : int) : int+AddGrade(in gradename : string) : bool+AddState(in statename : string) : bool+AddType(in typename : string) : b

12、ool+AddDepart(in departname : string) : bool图15-6基础配置类静态类图(2)客户管理模块:主要包括两大功能,客户的管理和联系人的管理。考虑到客户和联系人的属性比较多, 采用实体设计的模式完成其设计。 两大功能分别包含两个类: 实体类 和实体方法类。客户信息实体类,如图 15-7所示。客户实体方法类,如图 15-8所示。联系 人信息实体类,如图15-9所示。联系人实体方法类,如图 15-10所示。UserInfoEntity-UserName +SoftVersion : string +UserGrade : string +UserState :

13、 string +UserType : string +City : string +Address : string +Linkman : string +Phone : string +Fax : string +QQ : string +Mail : string +PeopleAmount : int图15-7客户信息实体类图UserInfoDA+InsertUser(in user : UserInfoEntity) : bool -GetCityID(in cityname : string, out cityid : int) : int -GetStateID(in state

14、name : string, out stateid : int) : int -GetTypeID(in typename : string, out typeid : int) : int -GetStateID(in statename : string, out stateid : int) : int -GetParameters() : sqlparameter图15-8客户信息实体方法类图LinkmanEntity +Name : string +Sex +Phone : string +QQ : string +Mail : string +Birthday +Like : s

15、tring +CompanyName : string +Note : string图15-9联系人信息实体类图LinkmanDA+InsertLinkman(in linkman : LinkmanEntity) : bool-GetParameters() : sqlparameter+GetBirthMan() : datetime+GetCompanyID(in companyname : string, out companyid : int) : int图15-10联系人信息实体方法类图注意:实体方法类实现了对实体类的调用。(3)成员管理模块:管理内部员工,主要包括员工的添加和员工

16、所在部门的设置。使用实体设计模式实现其功能。成员信息实体类,参考类图15-11。成员信息实体方法类图,参考图15-12EmployeeEntity +Name : string +Phone : string +Sex : string +Mail : string +Depart : string +Birthday : DateTime +Note : string图15-11员工信息实体方法类图EmployeeDA+InsertEmployee(in employee : EmployeeEntity) : bool +GetDepartID(in departname : string

17、, out departid : int) : int +GetParameters() : SqlParameter图15-12员工信息实体方法类图(4)客户服务管理模块:主要包括的方法有添加投诉、登记需求、签订合同和登记实施项目等,还有日志管理、任务管理和联系记录管理3个大的功能。为了减少代码冗余,3个功能用实体类设计模式,而其他4个方法统一放在一个客户服务操作类中。受版面限制,本模块的所有类图设计,请参考随书光盘。类图设计完毕后,准备进行系统数据库的设计。1.1.1 数据库设计数据库设计主要考虑如何以最简单的关系存储数据信息,而且数据表之间的关联必须正确的体现。1.1.2 数据库的表信息

18、根据需求列表和功能设计,将需要的信息分类, 保存在不同的表中。 下面分别介绍这些表。(1)区域表:主要内容是区域名称。表结构如表15-1所示。表15-1 区域表(Area )信息AreaIDint(自增长列)区域IDAreaNamenvarchar(20)区域名称(2)城市表:包括城市名称和所属区域的ID。该表与区域表相关联,结构如表 15-2所示,其中PK表示主键,FK表示外键。表15-2 城市表(City)信息CityIDint(自增长列)城市IDAreaIDint区域IDCityNamenvarchar(20)城市名称(3)客户等级表:主要是区别客户是否与公司存在合同关系,或是否正准备与

19、公司签 订合同等。目前主要有三个级别:潜在、意向、有效。结构如表15-3所示。表15-3客户等级表(UserGrade )信息GradeIDint(自增长列)等级IDGradeNamenvarchar(20)等级名称(4)客户业务类型表:主要是列出客户的经营范围,所属行业。结构如表15-4所示。表15-4 客户业务类型表(UserType )信息TypeIDint(自增长列)类型IDTypeNamenvarchar(20)类型名称(5)客户状态表:一般针对客户等级为意向的用户群。主要状态有跟进和签约。结构 如表15-5所示。表15-5 客户状态表(UserState )信息StateIDint

20、(自增长列)状态IDStateNamenvarchar(20)状态名称(6)部门表:列出公司的主要组织结构名称,结构如表15-6所示。表15-6 部门表(Department )信息DepartIDint(自增长列)部门IDDepartNamenvarchar(20)部门名称(7)客户资料表:详细描述用户信息的表。该表与多个基础设置表有关联,结构如表 15-7所示。表15-7 客户资料表(UserInfo )信息UserIDint(自增长列)客户IDCityIDint城市IDGradeIDint客户等级IDTypeIDint客户业务类型IDStateIDint客户犬态IDUserNamenva

21、rchar(20)客户名称UserAddressnvarchar(100)客户联系地址SoftVersionnvarchar(50)所用软件版本UserLinkmannvarchar(20)客户的主要联系人UserPhonenvarchar(20)客户的联系电话Emailnvarchar(20)邮箱QQnvarchar(20)QQ号Faxnvarchar(20)传真PeopleAmountint公司人员规模(8)联系人表:与公司有关的人的详细资料,结构如表 15-8所示。联系人通过 UserID 与用户资料表进行关联,表示此联系人属于公司的客户。 为了提高数据库的访问速度,此处 用bit类型表

22、示性别,0表示男,1表示女。Bit类型有且只有这两个值。表15-8 联系人表(Linkman )信息LinkmanIDint(自增长列)联系人IDUserIDint联系人所属公司LinkmanNamenvarchar(20)联系人名称LinkmanPhonenvarchar(20)电话LinkmanEmailnvarchar(20)邮箱LinkmanQQnvarchar(20)QQ号LinkmanBirthdaydatetime联系人的生日LinkmanLikenvarchar(50)联系人的业务爱好LinkmanSexbit性别Notenvarchar(50)备注(9)员工资料表:包括公司所

23、有雇员的信息,结构如表15-9所示。通过 DepartID与部门表关联。表15-9员工资料表(EmployeeInfo )信息EmployeeIDint(自增长列)员工IDDepartIDint员工所属部门EmployeeNamenvarchar(20)联系人名称EmployeePhonenvarchar(20)电话EmployeeEmailnvarchar(20)邮箱EmployeeBirthdaydatetime联系人的生日EmployeeSexbit性别Notenvarchar(50)备注(10)工作日志表:包含所有员工登记的工作日志记录。结构如表 15-10所示。表15-10 工作日志

24、表(WorkLog )信息LogIDint(自增长列)日志IDEmployeeIDint人员IDLogTitlenvarchar(20)日志主题LogContentnvarchar(100)日志内容(11)联系记录表:登记销售人员每天的工作情况,主要记录联系客户的时间和内容。 结构如表15-11所示。表15-11 工作日志表(LinkRecord )信息LinkRecordIDint(自增长列)日志IDEmployeeIDint人员IDUserIDint客户IDLinkDatedatetime联系时间LinkNotenvarchar(100)联系内容摘要(12)计划任务:针对实施人员制定的一个

25、计划安排表,结构如表15-12所示。表15-12 计划任务表(Task)信息TaskIDint(自增长列)任务IDEmployeeIDint人员IDUserIDint客户IDTaskTimenvarchar(20)任务主题TaskBiginDatedatetime任务开始日期TaskEndDatedatetime任务结束日期TaskNotenvarchar(100)任务内容摘要(13)投诉处理表:显示所有的投诉信息和处理意见,结构如表15-13所示。表15-13 投诉处理表(Notion )信息NotionIDint(自增长列)投诉IDEmployeeIDint处理人员IDUserIDint投

26、诉客户IDNotionContentnvarchar(100)投诉内容HandleContentnvarchar(100)处理意见NotionDatedatetime投诉日期HandleDatedatetime处理日期(14)需求处理表:显示用户的新需求和开发人员给予的处理意见,结构如表 15-14所示。表15-14 需求处理表(Requirement )信息RequirementIDint(自增长列)需求IDEmployeeIDint处理人员IDUserIDint需求客户IDRequirementContentnvarchar(100)需求内容HandleContentnvarchar(10

27、0)处理意见RequirementDatedatetime需求登记日期HandleDatedatetime处理日期(15)实施表:记录实施人员每次的实施情况,结构如表15-15所示。表15-15 实施表(Implement )信息ImplementIDint(自增长列)实施IDEmployeeIDint实施人员IDUserIDint被实施客户IDSoftVersionnvarchar(20)实施软件的版本ImplementBiginDatedatetime实施开始日期ImplementEndDatedatetime实施结束日期ImplementSumUpnvarchar(100)实施总结Not

28、envarchar(100)备注(16)合同表:管理与用户之间的合同,主要用于合同到期时的提醒功能,结构如表 15-16所示。表15-13 合同表(Bargain )信息BargainIDint(自增长列)任务IDEmployeeIDint签合同人员IDUserIDint合同签订对象IDBargainBiginDatedatetime合同开始日期BargainEndDatedatetime合同结束日期BargainNotenvarchar(100)合同内容摘要说明:在数据库的设计中,类似于区域设置、客户状态设置等这种表,被称为字典表,表示预先设置好的各种选项。1.1.3 数据库的表关系数据表之

29、间的关系,通过ID来关联,因为每个表的ID都具有唯一性。主键表示本表内部的唯一键值,外键表示本表与其他表之间的关联ID。根据功能设计和表结构,现在分析这些表之间的关联。(1)本实例是客户关系管理系统,所以客户表几乎与所有的表都有关系,都通过主键UserID与其他表关联。图15-13所示的是客户表通过 UserID 一个名为UserID的字段,表示外键。相关联的表。在其他表中都有TaskIp e 1二ITserlnf 9Bargainloti onMet ion ID工 E 1>EJserlJErrw 1”*噌 ID-IDCity I。 GriicID SUtelD Ijie IS JeD

30、am。(Ts ct! &旧 CEE Sc* ftVe.r£i05 EJ= eri ini Us uhFEqdlh ItailQQ FaxFcqj 1 ulgutLinkRecordluLkfijCCQi-dlSET= «IHRequii-eBeiLtF.taniriCEUHt IBImp Joy c e ID图15-13 通过UserID关联的表(2)客户表中的资料非常详细,但并不是所有内容都必须登记在其中的,为了减少数据冗余,并且维护方便,设计时将城市、客户等级、客户业务类型和客户状态4个类型单独列出来,并分别为其设计一个表,用于存储信息。并将这4个表的主键保存在

31、客户表中,作为客户表的外键。其关系如图15-14所示。IfEerlAfaWserTypeTjiellTjielTaimcUscrStat ftSUtelJS ta. telTaEEVe e r Gt aide七ISGt 3- delTarneCitrlJ GraddfilDTtbsIJUs。工ITam。口。工”。Hr0方方S«f tVcts len eri iulmn(Te。工ItiilQQ FixFe4l 1 clnvimt图15-14客户表的外键关联图(3)在数据库中还有一个很重要的表:员工表,从功能模块图中可以发现,每个操作 功能都有员工的参与,根据模块图,设计员工表与其他表之

32、间的关系,如图 15-15所示。所 有关联表的外键都是 EmployeelD 。Kquir«Bei3LtBffinir emeu til a Imp lajeellUser19Bro. ui r £m»tCciLl IfTTo lc<7 ecIDUm IDSq ftVersion0Epl4 川 绐工口 £。Inn L4yeelD BtVMjrtID 工呷 lOTtuM-mc;IE La?Imp Loy e elik il Ee l4ccBirthda He Eo t erkLoUserIDEair ga 】ilB t g3:i 1Sara milL

33、arTitleLcBECOD.t£lltlotionIToti£>ILl)Te loTdd IDDe»IIITotionCojit entTTv El 由 1I TI 十Tl tTaskIaL=kIHIlTackTitleTai仁上已f Li uTl 寸¥图15-15员工表的外键关联图除了这些主要的关系之外,数据库中还有一些小关系,例如区域和城市之间的关联,部 门与员工之间的关联等,在此不再详细描述,读者可参考随书光盘。1.1.4 数据库的操作类每一个软件系统,只要用到数据库,都必须包括数据操作类,本例所有数据操作方法, 都使用Microsoft提

34、供的数据访问助手 SqlHelper。SqlHelper是一个数据操作类,主要包括三类方法:ExcuteNonQuery、ExcuteScalar和ExcuteReader。虽然只有三类方法,但通过方法的重载,此类共提供6个操作数据的方法。通过这些方法,可以简化逻辑层与数据层之间的交互,方便了程序的开发。此类的所有代码请参考清单15-1。代码清单 15-1数据操作类 SqlHelper 的代码using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;u

35、sing System.Collections;using System.Data.SqlClient;/ <summary>/ 数据库的通用访问代码/ 此类为抽象类,不允许实例化,在应用时直接调用即可/ </summary>public abstract class SqlHelper/获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改public static readonly string ConnectionStringLocalTransaction =ConfigurationManager.ConnectionStrings

36、"SoftCRMConnectionString".ConnectionString;/ 哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数。private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable();/ <summary>/执行一个不需要返回值的SqlCommand 命令,通过指定专用的连接字符串。/ 使用参数数组形式提供参数列表/ </summary>/ <remarks>/ 使用示例:/ int result = ExecuteNon

37、Query(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("prodid", 24);/ </remarks>/ <param name="connectionString"> 一个有效的数据库连接字符串</param>/ <param name="commandType">SqlCommand 命令类型(存储过程,T-SQL 语句,等等。 )</param&

38、gt;/ <param name="commandText"> 存储过程的名字或者T-SQL 语句 </param>/ <param name="commandParameters"> 以数组形式提供 SqlCommand 命令中用到的参数列表</param>/ <returns> 返回一个数值表示此SqlCommand 命令执行后影响的行数</returns>public static int ExecuteNonQuery(string connectionString, Com

39、mandType cmdType, string cmdText, params SqlParameter commandParameters)SqlCommand cmd = new SqlCommand();using (SqlConnection conn = new SqlConnection(connectionString)/通过PrePareCommand 方法将参数逐个加入到SqlCommand 的参数集合中PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);int val = cmd.Exe

40、cuteNonQuery();/清空SqlCommand 中的参数列表cmd.Parameters.Clear();return val;/ <summary>/执行一条不返回结果的SqlCommand ,通过一个已经存在的数据库连接/ 使用参数数组提供参数/ </summary>/ <remarks>/ 使用示例:/ int result = ExecuteNonQuery(conn,CommandType.StoredProcedure,"PublishOrders", new SqlParameter("prodid&qu

41、ot;, 24);/ </remarks>/ <param name="conn"> 一个现有的数据库连接</param>/ <param name="commandType">SqlCommand 命令类型(存储过程,T-SQL 语句,等等。 )</param>/ <param name="commandText"> 存储过程的名字或者T-SQL 语句 </param>/ <param name="commandParameters&

42、quot;> 以数组形式提供 SqlCommand 命令中用到的参数列表</param>/ <returns> 返回一个数值表示此SqlCommand 命令执行后影响的行数</returns>public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter commandParameters)SqlCommand cmd = new SqlCommand();PrepareCommand

43、(cmd, connection, null, cmdType, cmdText, commandParameters);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;/ <summary>/执行一条不返回结果的SqlCommand ,通过一个已经存在的数据库事物处理/ 使用参数数组提供参数/ </summary>/ <remarks>/ 使用示例:/ int result = ExecuteNonQuery(trans,CommandType.StoredProcedur

44、e,"PublishOrders", new SqlParameter("prodid", 24);/ </remarks>/ <param name="trans"> 一个存在的sql 事物处理</param>/ <param name="commandType">SqlCommand 命令类型(存储过程,T-SQL 语句,等等。 )</param>/ <param name="commandText"> 存储过程的名字或

45、者T-SQL 语句 </param>/ <param name="commandParameters"> 以数组形式提供 SqlCommand 命令中用到的参数列表</param>/ <returns> 返回一个数值表示此SqlCommand 命令执行后影响的行数</returns>public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter comma

46、ndParameters)SqlCommand cmd = new SqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;/ <summary>/ 执行一条返回结果集的SqlCommand 命令,通过专用的连接字符串。/ 使用参数数组提供参数/ </summary>/ <remarks>/ 使用

47、示例:/ SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("prodid", 24);/ </remarks>/ <param name="connectionString"> 一个有效的数据库连接字符串</param>/ <param name="commandType">SqlCommand 命令类型

48、(存储过程,T-SQL 语句,等等。 )</param>/ <param name="commandText"> 存储过程的名字或者T-SQL 语句 </param>/ <param name="commandParameters"> 以数组形式提供 SqlCommand 命令中用到 的参数列表</param>/ <returns> 返回一个包含结果的SqlDataReader</returns>public static SqlDataReader ExecuteRea

49、der(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters)SqlCommand cmd = new SqlCommand();SqlConnection conn = new SqlConnection(connectionString);/ 在这里使用try/catch 处理是因为,如果方法出现异常,则SqlDataReader 就不存在。CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获

50、。/关闭数据库连接,并通过throw 再次引发捕捉到的异常。try PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();return rdr; catchconn.Close(); throw;/ <summary>/ 执行一条返回第一条记录第一列的SqlCommand 命令, 通过专用的连接字符串。/ 使用参数数组提

51、供参数/ </summary>/ <remarks>/ 使用示例:/ Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("prodid", 24);/ </remarks>/ <param name="connectionString"> 一个有效的数据库连接字符串</param>/ <param name="

52、;commandType">SqlCommand 命令类型(存储过程,T-SQL 语句,等等。 )</param>/ <param name="commandText"> 存储过程的名字或者T-SQL 语句 </param>/ <param name="commandParameters"> 以数组形式提供 SqlCommand 命令中用到的参数列表</param>/ <returns> 返回一个object 类型的数据,可以通过Convert.ToType 方法转换

53、类型</returns>public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters)SqlCommand cmd = new SqlCommand();using (SqlConnection connection = new SqlConnection(connectionString)PrepareCommand(cmd, connection, null, cmdTyp

54、e, cmdText, commandParameters);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;/ <summary>/ 执行返回第一条记录第一列的SqlCommand 命令, 通过已经存在的数据库连接。/ 使用参数数组提供参数/ </summary>/ <remarks>/ 使用示例:/ Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrder

55、s", new SqlParameter("prodid", 24);/ </remarks>/ <param name="conn"> 一个已经存在的数据库连接</param>/ <param name="commandType">SqlCommand 命令类型(存储过程,T-SQL 语句,等等。 )</param>/ <param name="commandText"> 存储过程的名字或者T-SQL 语句 </param&g

56、t;/ <param name="commandParameters"> 以数组形式提供 SqlCommand 命令中用到 的参数列表</param>/ <returns> 返回一个object 类型的数据,可以通过Convert.ToType 方法转换类型</returns>public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter commandPa

57、rameters)SqlCommand cmd = new SqlCommand();PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;/ <summary>/ 缓存参数数组/ </summary>/ <param name="cacheKey"> 参数缓存的键值</param>/ <param name="cmdParms"> 被缓存的参数列表</param>public static void CacheParameters(string cach

温馨提示

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

评论

0/150

提交评论