.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

 

 

 

目录
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
614 4
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
584 16
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
1083 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
491 19
|
存储 SQL 并行计算
【赵渝强老师】达梦数据库MPP集群的架构
达梦数据库提供大规模并行处理(MPP)架构,以低成本实现高性能并行计算,满足海量数据存储和复杂查询需求。DM MPP采用完全对等无共享体系,消除主节点瓶颈,通过多节点并行执行提升性能。其执行流程包括主EP生成计划、分发任务、各EP并行处理及结果汇总返回。为确保高可用性,建议结合数据守护部署。
681 0
|
SQL 弹性计算 安全
【上云基础系列04】基于标准架构的数据库升级
本文回顾了业务上云从基础到进阶的理念,涵盖基础版和全栈版架构。在“入门级:上云标准弹性架构基础版”的基础上,本文针对数据库升级,重点介绍了高可用数据库架构的升级方案,确保数据安全和业务连续性。最后,附有详细的“上云标准弹性架构”演进说明,帮助用户选择合适的架构方案。
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
3230 0