博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

学习一个通用数据库访问类

Posted on 2007-07-20 10:01  服务器超时  阅读(247)  评论(0)    收藏  举报
http://www.cnblogs.com/jigee/archive/2006/06/26/436070.html 这个地方看到的,转移过来学习!

  1using System;
  2using System.Data;
  3using System.Data.SqlClient;
  4using System.Configuration;
  5using System.ComponentModel;namespace SQLHelper
  6{
  7    /// <summary>
  8    /// Class1 的摘要说明。
  9    /// </summary>

 10    public class SQLHelper
 11    {
 12        // 连接数据源
 13        private SqlConnection myConnection;
 14        private readonly string RETURNVALUE = "RETURNVALUE";
 15
 16        /// <summary>
 17        /// 打开数据库连接.
 18        /// </summary>

 19        private void Open() 
 20        {
 21            // 打开数据库连接
 22            if (myConnection == null
 23            {
 24                myConnection = new SqlConnection(ConfigurationSettings.AppSettings["SQLCONNECTIONSTRING"].ToString());                
 25            }
                
 26            if(myConnection.State == ConnectionState.Closed)
 27            {   
 28                try
 29                {
 30                    ///打开数据库连接
 31                    myConnection.Open();
 32                }

 33                catch(Exception ex)
 34                {
 35                    SystemError.SystemLog(ex.Message);
 36                }

 37                finally
 38                {
 39                    ///关闭已经打开的数据库连接                
 40                }

 41            }

 42        }

 43
 44        /// <summary>
 45        /// 关闭数据库连接
 46        /// </summary>

 47        public void Close() 
 48        {
 49            ///判断连接是否已经创建
 50            if(myConnection != null)
 51            {
 52                ///判断连接的状态是否打开
 53                if(myConnection.State == ConnectionState.Open)
 54                {
 55                    myConnection.Close();
 56                }

 57            }

 58        }

 59
 60        /// <summary>
 61        /// 释放资源
 62        /// </summary>

 63        public void Dispose() 
 64        {
 65            // 确认连接是否已经关闭
 66            if (myConnection != null
 67            {
 68                myConnection.Dispose();
 69                myConnection = null;
 70            }
                
 71        }

 72        
 73        /// <summary>
 74        /// 执行存储过程
 75        /// </summary>
 76        /// <param name="procName">存储过程的名称</param>
 77        /// <returns>返回存储过程返回值</returns>

 78        public int RunProc(string procName) 
 79        {
 80            SqlCommand cmd = CreateCommand(procName, null);
 81            try
 82            {
 83                ///执行存储过程
 84                cmd.ExecuteNonQuery();
 85            }

 86            catch(Exception ex)
 87            {
 88                ///记录错误日志
 89                SystemError.SystemLog(ex.Message);
 90            }

 91            ///关闭数据库的连接
 92            Close();
 93            
 94            ///返回存储过程的参数值
 95            return (int)cmd.Parameters[RETURNVALUE].Value;
 96        }

 97
 98        /// <summary>
 99        /// 执行存储过程
100        /// </summary>
101        /// <param name="procName">存储过程名称</param>
102        /// <param name="prams">存储过程所需参数</param>
103        /// <returns>返回存储过程返回值</returns>

104        public int RunProc(string procName, SqlParameter[] prams) 
105        {
106            SqlCommand cmd = CreateCommand(procName, prams);
107            try
108            {
109                ///执行存储过程
110                cmd.ExecuteNonQuery();
111            }

112            catch(Exception ex)
113            {
114                ///记录错误日志
115                SystemError.SystemLog(ex.Message);
116            }

117            ///关闭数据库的连接
118            Close();
119            
120            ///返回存储过程的参数值
121            return (int)cmd.Parameters[RETURNVALUE].Value;
122        }

123
124        /// <summary>
125        /// 执行存储过程
126        /// </summary>
127        /// <param name="procName">存储过程的名称</param>
128        /// <param name="dataReader">返回存储过程返回值</param>

129        public void RunProc(string procName, out SqlDataReader dataReader) 
130        {
131            ///创建Command
132            SqlCommand cmd = CreateCommand(procName, null);
133            
134            ///读取数据
135            dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);                
136        }

137
138        /// <summary>
139        /// 执行存储过程
140        /// </summary>
141        /// <param name="procName">存储过程的名称</param>
142        /// <param name="prams">存储过程所需参数</param>
143        /// <param name="dataReader">存储过程所需参数</param>

144        public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader) 
145        {
146            ///创建Command
147            SqlCommand cmd = CreateCommand(procName, prams);
148            
149            ///读取数据
150            dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
151        }

152        
153        /// <summary>
154        /// 创建一个SqlCommand对象以此来执行存储过程
155        /// </summary>
156        /// <param name="procName">存储过程的名称</param>
157        /// <param name="prams">存储过程所需参数</param>
158        /// <returns>返回SqlCommand对象</returns>

159        private SqlCommand CreateCommand(string procName, SqlParameter[] prams) 
160        {
161            ///打开数据库连接
162            Open();
163            
164            ///设置Command
165            SqlCommand cmd = new SqlCommand(procName, myConnection);
166            cmd.CommandType = CommandType.StoredProcedure;
167
168            ///添加把存储过程的参数
169            if (prams != null
170            {
171                foreach (SqlParameter parameter in prams)
172                {
173                    cmd.Parameters.Add(parameter);
174                }

175            }

176            
177            ///添加返回参数ReturnValue
178            cmd.Parameters.Add(
179                new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,
180                false,0,0,string.Empty, DataRowVersion.Default,null));
181
182            ///返回创建的SqlCommand对象
183            return cmd;
184        }

185        
186        /// <summary>
187        /// 生成存储过程参数
188        /// </summary>
189        /// <param name="ParamName">存储过程名称</param>
190        /// <param name="DbType">参数类型</param>
191        /// <param name="Size">参数大小</param>
192        /// <param name="Direction">参数方向</param>
193        /// <param name="Value">参数值</param>
194        /// <returns>新的 parameter 对象</returns>

195        public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
196        {
197            SqlParameter param;
198
199            ///当参数大小为0时,不使用该参数大小值
200            if(Size > 0)
201            {
202                param = new SqlParameter(ParamName, DbType, Size);
203            }

204            else
205            {
206                ///当参数大小为0时,不使用该参数大小值
207                param = new SqlParameter(ParamName, DbType);
208            }

209
210            ///创建输出类型的参数
211            param.Direction = Direction;
212            if (!(Direction == ParameterDirection.Output && Value == null))
213            {
214                param.Value = Value;
215            }

216
217            ///返回创建的参数
218            return param;
219        }

220
221        /// <summary>
222        /// 传入输入参数
223        /// </summary>
224        /// <param name="ParamName">存储过程名称</param>
225        /// <param name="DbType">参数类型</param></param>
226        /// <param name="Size">参数大小</param>
227        /// <param name="Value">参数值</param>
228        /// <returns>新的parameter 对象</returns>

229        public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value) 
230        {
231            ///创建输入类型的参数
232            return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
233        }
        
234
235        /// <summary>
236        /// 传入返回值参数
237        /// </summary>
238        /// <param name="ParamName">存储过程名称</param>
239        /// <param name="DbType">参数类型</param>
240        /// <param name="Size">参数大小</param>
241        /// <returns>新的 parameter 对象</returns>

242        public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size) 
243        {
244            ///创建输出类型的参数
245            return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
246        }
        
247
248        /// <summary>
249        /// 传入返回值参数
250        /// </summary>
251        /// <param name="ParamName">存储过程名称</param>
252        /// <param name="DbType">参数类型</param>
253        /// <param name="Size">参数大小</param>
254        /// <returns>新的 parameter 对象</returns>

255        public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size) 
256        {
257            ///创建返回类型的参数
258            return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
259        }
            
260    }

261}

262