利用SQL存储过程的基层数据类

来源:互联网 发布:商派onex 源码下载 编辑:程序博客网 时间:2024/05/29 08:35
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace OA.Components
{
    
/// <summary>
    
/// 通过数据库处理类,通过ADO.NET与数据库连接,采用SQL存储过程
    
/// </summary>

    public class Database :IDisposable
    
{
        
private readonly string SQLCONNECTIONSTRING = ConfigurationSettings.AppSettings["SQLCONNECTIONSTRING"].ToString();
        
private SqlConnection conn;

        
public Database()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
private void Open() 
        
{
            
if (conn == null)
            
{conn = new SqlConnection(SQLCONNECTIONSTRING);}
            
if (conn.State == ConnectionState.Closed)
            
{
                
try{conn.Open();}
                
catch (Exception ex) {throw new Exception("数据库连接失败!",ex);}
            }

        }


        
//<summary>关闭数据库连接</summary>

        
public void Close()
        
{
            
if (conn != null)
            
{
                
if (conn.State == ConnectionState.Open)
                    conn.Close();
            }

        }


        
public void Dispose()
        
{
            
if (conn != null)
            
{
                conn.Dispose();
                conn 
= null;
            }

        }



        
//<summary>
        
//执行存储过程
        
//<param name = "procName">存储过程名称</param>
        
//返回存储过程返回值
        
//</summary>

        
public int RunProc(string procName)
        
{
            SqlCommand cmd 
= CreateCommand(procName,null);
            
try{cmd.ExecuteNonQuery();}
            
catch(Exception ex) {throw new Exception("操作有误!",ex);}
            Close();
            
return (int) cmd.Parameters["ReturnValue"].Value;
        }


        
public int RunProc(string procName, SqlParameter[] prams) 
        
{
            SqlCommand cmd 
= CreateCommand(procName, prams);
            
try
            
{
                cmd.ExecuteNonQuery();
            }

            
catch(Exception ex)
            
{
                SystemError.SystemLog(ex.Message);
            }

            Close();
            
return (int)cmd.Parameters["ReturnValue"].Value;
        }



        
public void RunProc(string procName,out SqlDataReader dataReader )
        
{
            SqlCommand cmd 
= CreateCommand(procName,null);
            dataReader  
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }


        
public void RunProc(string procName,SqlParameter[] prams,out SqlDataReader dataReader)
        
{
            SqlCommand cmd 
= CreateCommand(procName,prams);
            dataReader  
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }


        
//<summary>
        
//创建一个SqlCommand 对象来执行存储过程
        
//<param name = "procName">存储过程名称</param>
        
//<param name = "prams">存储过程参数</param>
        
//return 返回sqlCommand 对象
        
//</summary>

        
private SqlCommand CreateCommand(string procName,SqlParameter[] prams)
        
{
            Open();
            SqlCommand cmd 
= new SqlCommand(procName,conn);
            cmd.CommandType 
= CommandType.StoredProcedure;
            
//依次把参数传入存储过程
            if (prams != null)
            
{
                
foreach (SqlParameter parameter in prams)
                
{
                    cmd.Parameters.Add(parameter);
                }

            }

            
//加入返回参数
            cmd.Parameters.Add(
                
new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,
                
string.Empty,DataRowVersion.Default,null));
            
return cmd;
         }


        
//<summary>
        
//生成存储过程的参数
        
//<param name="ParamName">存储过程名称</param>
        
//<param name="DbType">参数类型</param>
        
//<param name="Size">参数大小</param>
        
//<param name="Direction">参数方向</param>
        
//<param name="Value">参数值</param>
        
//<returns> 新的 Parameter 对象</returns>
        
        
public SqlParameter CreateParam(string ParamName,SqlDbType DbType,Int32 Size,ParameterDirection Direction,object Value)
        
{
            SqlParameter param;
            
//当参数大小为 0 时,不使用该参数的大小
            if (Size >0)
            
{
                param 
= new SqlParameter(ParamName,DbType,Size);
            }

            
else
            
{
                param 
= new SqlParameter(ParamName,DbType);
            }

            
//创建输出类型的参数
            param.Direction = Direction;
            
if (!(Direction==ParameterDirection.Output && Value == null))
            
{
                param.Value 
= Value;
            }

            
return param;
        }


        
public SqlParameter CreateInParam(string ParamName,SqlDbType DbType,int Size,object Value)
        
{
            
return CreateParam(ParamName,DbType,Size,ParameterDirection.Input,Value);
        }


        
public SqlParameter CreateOutParam(string ParamName,SqlDbType DbType,int Size)
        
{
            
return CreateParam(ParamName,DbType,Size,ParameterDirection.Output,null);
        }


        
public SqlParameter CreateReturnParam(string ParamName,SqlDbType DbType,int Size)
        
{
            
return CreateParam(ParamName,DbType,Size,ParameterDirection.ReturnValue,null);
        }




    }

}

 
原创粉丝点击