天天看点

.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 { set; get; }

19 

20         public SqlParameter[] CommandParameters { set; get; }

21     }

22 }