.NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(1)-阿里云开发者社区

开发者社区> 夏春涛> 正文

.NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(1)

简介: 4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(1)   4.1 解决方案框架 解决方案(.sln)包含以下几个项目: (1)类库项目HomeShop.DbUtility,数据访问实用工具; (2)类库项目HomeShop.Model,实体层; (3)类库项目HomeShop.DAL,数据访问层; (4)类库项目HomeShop.BLL,业务逻辑层; (5)WinForm项目HomeShop.WinForm,界面层。
+关注继续查看

4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(1)

 

4.1 解决方案框架

解决方案(.sln)包含以下几个项目:

(1)类库项目HomeShop.DbUtility,数据访问实用工具;

(2)类库项目HomeShop.Model,实体层;

(3)类库项目HomeShop.DAL,数据访问层;

(4)类库项目HomeShop.BLL,业务逻辑层;

(5)WinForm项目HomeShop.WinForm,界面层。

 

4.2 数据访问实用工具HomeShop.DbUtility

 

SqlDbHelper.cs

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Data;//新添命名空间
  6 using System.Configuration;//新添命名空间
  7 using System.Data.SqlClient;//新添命名空间
  8 
  9 namespace HomeShop.DbUtility
 10 {
 11     //功能:SQL Server数据访问基础类;
 12     //作者:夏春涛;
 13     //日期:2011-11-30;
 14     public class SqlDbHelper
 15     {
 16         //数据库连接字符串
 17         private string connectionString = "";
 18         public string ConnectionString
 19         {
 20             get {return connectionString; }
 21         }
 22 
 23         //数据库连接对象
 24         private SqlConnection connection;
 25         
 26         //默认构造函数,从应用程序配置文件中读取第1个数据库连接字符串
 27         public SqlDbHelper()
 28         {
 29             this.connectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
 30             this.connection = new SqlConnection(this.connectionString);            
 31         }
 32 
 33         //重载构造函数,根据入参初始化数据库连接字符串
 34         public SqlDbHelper(string connectionString)
 35         {
 36             this.connectionString = connectionString;
 37             this.connection = new SqlConnection(this.connectionString);
 38         }
 39 
 40         //执行SQL命令(Select),获取返回数据-重载函数
 41         public DataTable ExecuteQuery(string selectCommandText)
 42         {
 43             return ExecuteQuery(selectCommandText, null);
 44         }
 45 
 46         //执行SQL命令(Select),获取返回数据
 47         public DataTable ExecuteQuery(string selectCommandText, params SqlParameter[] cmdParameters)
 48         {            
 49             connection.Open();
 50             SqlCommand command = new SqlCommand(selectCommandText, connection);
 51             if (null != cmdParameters)
 52             {
 53                 for (int i = 0; i < cmdParameters.Length; i++)
 54                 {
 55                     command.Parameters.Add(cmdParameters[i]);
 56                 }
 57             }
 58             SqlDataAdapter adapter = new SqlDataAdapter(command);
 59             DataTable dataTable = new DataTable();
 60             adapter.Fill(dataTable);
 61             connection.Close();
 62 
 63             return dataTable;
 64         }
 65 
 66         //执行SQL命令(Insert/Delete/Update),以数据库事务方式
 67         public int ExecuteNonQueryTrans(string cmdText, params SqlParameter[] cmdParameters)
 68         {
 69             int rowsCountAffected = 0;            
 70             connection.Open();
 71             SqlCommand command = new SqlCommand(cmdText, connection);
 72             if (null != cmdParameters)
 73             {
 74                 for (int i = 0; i < cmdParameters.Length; i++)
 75                 {
 76                     command.Parameters.Add(cmdParameters[i]);
 77                 }
 78             }
 79             //开始数据库事务
 80             SqlTransaction trans = connection.BeginTransaction();
 81             command.Transaction = trans;
 82             try
 83             {
 84                 rowsCountAffected += command.ExecuteNonQuery();
 85                 trans.Commit();//提交数据库事务
 86             }
 87             catch
 88             {
 89                 trans.Rollback();//回滚数据库事务
 90                 throw;
 91             }
 92             connection.Close();
 93 
 94             return rowsCountAffected;
 95         }
 96 
 97         //执行多条SQL(Insert/Delete/Update),以数据库事务方式-重载函数
 98         public int ExecuteNonQueryTrans(params SqlCmdTextAndParams[] cmdTextAndParams)
 99         {
100             List<SqlCmdTextAndParams> list = new List<SqlCmdTextAndParams>();
101             for(int i=0;i<cmdTextAndParams.Length;i++)
102             {
103                 list.Add(cmdTextAndParams[i]);
104             }
105 
106             return ExecuteNonQueryTrans(list);
107         }
108 
109         //执行多条SQL(Insert/Delete/Update),以数据库事务方式
110         public int ExecuteNonQueryTrans(List<SqlCmdTextAndParams> listCmdTextAndParams)
111         {
112             int rowsCountAffected = 0;            
113             connection.Open();
114             //开始数据库事务
115             SqlTransaction trans = connection.BeginTransaction();
116             SqlCommand command = new SqlCommand();
117             command.Connection = connection;
118             command.Transaction = trans;
119             try
120             {
121                 //循环执行每一个CommandTextAndParameters对象
122                 foreach (SqlCmdTextAndParams cmdTextAndParams in listCmdTextAndParams)
123                 {
124                     command.CommandText = cmdTextAndParams.CommandText;
125                     foreach (SqlParameter param in cmdTextAndParams.CommandParameters)
126                     {
127                         command.Parameters.Add(param);
128                     }
129                     rowsCountAffected += command.ExecuteNonQuery();
130                     //清空参数列表,避免参数重名问题
131                     command.Parameters.Clear();
132                 }
133                 trans.Commit();//提交数据库事务
134             }
135             catch
136             {
137                 trans.Rollback();//回滚数据库事务
138                 throw;
139             }
140             connection.Close();
141 
142             return rowsCountAffected;
143         }
144 
145         //开始(生成)一个数据库事务
146         public SqlTransaction BeginTransaction()
147         { 
148             connection.Open();
149             SqlTransaction trans = connection.BeginTransaction();
150 
151             return trans;
152         }
153 
154         //在指定的数据库事务中执行SQL命令,最后要手工提交事务
155         public int ExecuteNonQueryTrans(SqlTransaction inTransaction, string cmdText, params SqlParameter[] cmdParameters)
156         {
157             int rowsCountAffected = 0;            
158             SqlCommand command = new SqlCommand(cmdText, inTransaction.Connection);
159             if (null != cmdParameters)
160             {
161                 for (int i = 0; i < cmdParameters.Length; i++)
162                 {
163                     command.Parameters.Add(cmdParameters[i]);
164                 }
165             }
166             command.Transaction = inTransaction;
167             rowsCountAffected += command.ExecuteNonQuery();
168             command.Parameters.Clear();//清空参数列表,避免参数重名问题
169 
170             return rowsCountAffected;
171         }
172 
173         //关闭数据库连接
174         public void Close()
175         {
176             if (ConnectionState.Open == this.connection.State )
177                 this.connection.Close();
178         }
179 
180         /****************************************************************************************/
181     }
182 }

  

SqlCmdTextAndParams.cs

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Data.SqlClient;//新添命名空间
 6 
 7 namespace HomeShop.DbUtility
 8 {
 9     //用于保存一条SQL命令及对应参数的类
10     public class SqlCmdTextAndParams
11     {
12         public SqlCmdTextAndParams(string commandText, params SqlParameter[] commandParamters)
13         {
14             this.CommandText = commandText;
15             this.CommandParameters = commandParamters;
16         }
17 
18         public string CommandText { setget; }
19 
20         public SqlParameter[] CommandParameters { setget; }
21     }
22 }

 

 

 

数据库文件:/Files/SummerRain/NetDbDevRoad/HomeShopDB.rar

完整源代码:/Files/SummerRain/NetDbDevRoad/4使用ADONET实现三层架构Table.rar

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
微软称Google Android可以使用.NET,徐汇区网站设计
最近Oracle起诉Google使用Java侵权的事件炒得沸沸扬扬,但微软开源技术中心总监Tom Hanraha说,微软不会禁止Google Android使用.NET 技术。Hanraha说:“像Oracle因Java而起诉Google这样的事情,微软是不会做的。
805 0
.NET数据库编程求索之路--9.使用EF实现
9.使用EF实现   源码下载: /Files/SummerRain/NetDbDevRoad/9使用EF实现1自动ORM简单三层.rar /Files/SummerRain/NetDbDevRoad/9使用EF实现2自动纯POCO代理简单三层.
651 0
.NET数据库编程求索之路--10.使用EF实现(划分输入验证层)
10.使用EF实现(划分输入验证层) 注:使用partial类来实现输入验证逻辑的分层。   源码下载: /Files/SummerRain/NetDbDevRoad/a使用EF实现4划分输入验证层.
576 0
Asp.net MVC 使用Autofac的简单使用 IOC
Ioc(Inversion of Control)或者叫依赖注入DI(Dependency Injection) 如果一个接口有两个实现类,但是在实现过程中,用到了这两个具体的实现类。 如果采用IOC,则只能是注册一个接口类型,那么如何确保IOC在合适的时候传入不同类的实例?这是我突然间想到的一个问题,希望园友们可以帮忙解答一下!     所谓IOC(控制反转)或者说是依赖注入,就是将你设计好的类交给系统去控制,而不是在你的类内部控制,控制权发生了变化,就称为控制反转。
913 0
再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!
阿里云数据库 InfluxDB® 版已于近日正式启动商业化 。 InfluxDB 是 DBengine 网站时序数据库类目排名第一的数据库产品,广泛应用于互联网基础资源监控,容器监控,业务运营监控分析,物联网设备远程实时监控,工业安全生产监控,生产质量评估和故障回溯。
3101 0
使用W“.NET技术”CF实现SOA面向服务编程——简单的WCF开发实例
  前面为大家介绍过WCF的特点,现在再讲解一下WCF基础概念。   在WCF里,各个Application之间的通信是由EndPoint来实现的,EndPoint是WCF实现通信的核心要素。一个WCF Service可由多个EndPoint集合组成,每个EndPoint只能有一种绑定,就是说EndPoint就是通信的入口,客户端和服务端通过 EndPoint交换信息。
690 0
使用WCF实现SOA面向服务编程——使用AJAX+WCF服务“.NET技术”页面开发
  在上一篇讲到,如果将BLL层的每一个类都转化为*.svc,这是一个不实在的想法。它会使服务变化复杂,难于管理。   这时候,我们第一时间想到的是23个简单开发模式中的Factory,在这里,Factory正好派上用场。
869 0
.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)
7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)   7.5 SQL数据访问层HomeShop.DALOfSql   OrderDAO.cs View Code using System;using System.
669 0
+关注
夏春涛
曾任教于信息工程大学16年,长期从事计算机软件与信息安全教学科研工作,目前任职于某软件公司从事技术管理工作,擅长架构设计、开发管理,对大数据、分布式颇感兴趣。
271
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载