.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

 

 

 

目录
相关文章
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
2月前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
186 61
|
2天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
16 1
|
6天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
9天前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
37 5
|
2月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
162 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
2月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
39 3
|
2月前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统