【轉載】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'caocao@QQ.com')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'sunquan@Gmail.com')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; }
新聞熱點
疑難解答