·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD

【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD

【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD 转自周公

说明:个人感觉在java领域大型开发都离不了ORM的身影,所谓的SSH就是SPRing+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据。在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的ORM持怀疑态度,你还可以使用来自微软的实现、根正苗红的Linq或者EntityFramework。大部分从早期就开始使用.NET开发的程序员可能对ADO.NET有种迷恋,使用ADO.NET可以充分将我们早期的SQL知识发挥得淋漓尽致,并且出于对性能的考虑,有些人对.NET中的ORM还保持一种观望态度,包括我自己也是这种态度。不过即使在实际开发中不用,并不代表我们不能去了解和比较这些技术,任何事物的出现和消亡总有其原因的,我们可以了解它们的优点和长处。所以本人抽出了几个周末的时间分别用ADO.NET、NHibernate、Linq和EntityFramework来实现对数据库单表数据的创建、读取、更新和删除操作,也就是所谓的CRUD(C:Create/R:Read/U:Update/D:Delete)。通过实现相同功能的比较,大家自己判断那种方式更适合自己。需要说明的是,如果在VS2008中使用EntityFramework就需要安装VS2008SP1。在开始演示之前先准备好数据,在本系列中所使用的数据库是SQL Server2005,创建和初始化数据库数据的代码如下:/****** 对象: Table [dbo].[UserInfo] 脚本日期: 03/08/2010 12:20:11 ******/

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOIF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[UserInfo]') AND type in (N'U'))BEGINCREATE TABLE [dbo].[UserInfo]( [UserID] [int] IDENTITY(1,1) NOT NULL, [UserName] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL, [RealName] [nvarchar](8) COLLATE Chinese_PRC_CI_AS NOT NULL, [Age] [tinyint] NOT NULL, [Sex] [bit] NOT NULL, [Mobile] [char](11) COLLATE Chinese_PRC_CI_AS NULL, [Phone] [char](11) COLLATE Chinese_PRC_CI_AS NULL, [Email] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED ( [UserID] ASC)WITH (IGNORE_DUP_KEY = OFF))ENDGOIF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[UserInfo]') AND name = N'IX_UserName')CREATE UNIQUE NONCLUSTERED INDEX [IX_UserName] ON [dbo].[UserInfo] ( [UserName] ASC)WITH (IGNORE_DUP_KEY = ON)GOSET IDENTITY_INSERT [dbo].[UserInfo] ONINSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (1, N'zhangfei', N'测试859', 36, 1, N'13455663420', N'03517890360', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (2, N'asddf', N'测试80', 38, 1, N'13455663421', N'03517890361', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (3, N'liubei', N'刘备', 42, 1, N'13455663422', N'03517890362', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (4, N'zhougong', N'周公', 29, 1, N'13455663423', N'03517890363', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (5, N'zhaoyun', N'赵云', 32, 1, N'13455663424', N'03517890364', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (6, N'huanggai', N'黄盖', 50, 1, N'13455663425', N'03517890365', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (7, N'zhugeliang', N'诸葛亮', 27, 1, N'13455663426', N'03517890366', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (8, N'jiangwei', N'姜维', 22, 1, N'13455663427', N'03517890367', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (9, N'caocao', N'曹操', 48, 1, N'13455663428', N'03517890368', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (10, N'guojia', N'郭嘉', 32, 1, N'13455663429', N'03517890369', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (11, N'sunquan', N'孙权', 33, 1, N'13455663430', N'03517890370', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (12, N'diaochan', N'貂禅', 20, 0, N'13455663431', N'03517890371', N'[email protected]')INSERT [dbo].[UserInfo] ([UserID], [UserName], [RealName], [Age], [Sex], [Mobile], [Phone], [Email]) VALUES (13, N'yangyuhuan', N'杨玉环', 24, 0, N'13455663432', N'03517890372', N'[email protected]')SET IDENTITY_INSERT [dbo].[UserInfo] OFF

下面开始演示如何使用ADO.NET实现CRUD功能。一、配置创建一个控制台或者类库项目,并且添加一个app.config配置文件,在此文件中添加数据库配置信息,如下:

<connectionStrings>  <add name="Conn" connectionString="Data Source=zhou;Initial Catalog=aspNetStudy;User ID=sa;PassWord=jerry" />  </connectionStrings> 
View Code

二、创建实体类

using System;  using System.Collections.Generic;  using System.Text;   namespace ADODoNETDemo  {      public class UserInfo      {          /// <summary>           /// 用户编号           /// </summary>           public int UserId { get; set; }          /// <summary>           /// 用户名           /// </summary>           public string UserName { get; set; }          /// <summary>           /// 真实姓名           /// </summary>           public string RealName { get; set; }          /// <summary>           /// 年龄          /// </summary>           public byte Age { get; set; }          /// <summary>           /// 性别          /// </summary>          public bool Sex { get; set; }          /// <summary>          /// 电子邮件           /// </summary>          public string Email { get; set; }          /// <summary>          /// 手机号           /// </summary>           public string Mobile { get; set; }          /// <summary>           /// 电话           /// </summary>          public string Phone { get; set; }      }  }  
View Code

三、创建数据库访问通用类说明:下面的这个数据库通用类适用于访问数据库中任意表,不管是基于文本方式SQL、参数化SQL语句或者存储过程都可以。

using System;  using System.Collections.Generic;  using System.Text;  using System.Data;  using System.Data.SqlClient;  using System.Configuration;    namespace ADODoNETDemo  {      /// <summary>       /// 针对SQL Server数据库操作的通用类       /// 作者:周公       /// 日期:2009-01-08       /// Version:1.0       /// </summary>       public class SqlDbHelper      {          private string connectionString;         /// <summary>          /// 设置数据库连接字符串           /// </summary>           public string ConnectionString          {             set { connectionString = value; }          }          /// <summary>           /// 构造函数           /// </summary>           public SqlDbHelper()              : this(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString)          {           }          /// <summary>           /// 构造函数           /// </summary>           /// <param name="connectionString">数据库连接字符串</param>          public SqlDbHelper(string connectionString)          {              this.connectionString = connectionString;          }