• .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.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

  • 相关阅读:
    [转载]Oracle查看当前用户权限
    [转载]Oracle查看当前用户权限
    UltraEdit实用技巧
    _splitpath,_makepath分析路径
    [ZT]让你的软件界面更漂亮(1、2)
    [book]程序员修炼之道
    考考你的C++水平
    将*.STL转换成顶点索引格式
    JBuilder 2006 企业完整版
    [book]道法自然
  • 原文地址:https://www.cnblogs.com/SummerRain/p/2609102.html
Copyright © 2020-2023  润新知