数据库操作基本方法实现

一、获取数据库连接和基本的信息

1定义接口

namespace Com.Mycompany.Data
{

     public interface IDbSetting
       {
	string ConnectionString
	{
		get;
	}
	DbServerType DbServerType
	{
		get;
	}

        string COID
        {
            get;
        }
        string UserNO
        {
            get;
        }…………

    }
}

2继承接口
namespace Com.Mycompany.Web.WebUI
{

    public class MyDBSetting : IDbSetting
    {

        public MyDBSetting(string language, UserInformation user)
        {

        }

        /// <summary>
        /// 数据连接串
        /// </summary>
        public string ConnectionString
        {
            get
            {
                if (HttpContext.Current.Application["ConnectionString"] == null)
                {
                    if (ConfigurationManager.ConnectionStrings["Conncetion"] == null)
                    {
                        throw new Exception(KDCommon.DataConnectionInfo);
                    }
                    else
                    {
                        HttpContext.Current.Application["ConnectionString"] = ConfigurationManager.ConnectionStrings["Conncetion"].ToString();
                    }
                }
                return HttpContext.Current.Application["ConnectionString"].ToString();
            }
        }

        /// <summary>
        /// 数据库类型
        /// </summary>
        public DbServerType DbServerType
        {
            get
            {
                return DbServerType.SqlServer;
            }
        }

        /// <summary>
        /// 当前公司coid
        /// </summary>
        public string COID
        {
            get
            {
                SessionTimeOut("coid");
                return HttpContext.Current.Session["coid"].ToString(); 
            }
        }
        public string UserNO
        {
            get
            {
                SessionTimeOut("loginuserno");
                return HttpContext.Current.Session["loginuserno"].ToString(); 
            }
        }
…………
    }
}

 3封装接口
namespace Com.Mycompany.Common
{

	public class BaseInfo
	{
		private static IDbSetting s_dbSetting = null;
		public static IDbSetting DbSetting
		{
			get
			{
				return s_dbSetting;
			}
                                     set
                                    {
                                                 BaseInfo.s_dbSetting = value;
                                     }
		}

		public BaseInfo()
		{

		}
               }
…………
}


 
二、数据库基本操作
 
 /// <summary>
 /// 访问数据库对象(辅助工具)
 /// </summary>
 /// <remarks></remarks>
 public sealed class DbUtils
 
1、创建连接
 
/// <summary>
/// 数据连接串
/// </summary>
	public static string ConnectionString
	{
		get
		{
			if( _connectionString == null || _connectionString.Length == 0)
			{
				return BaseInfo.DbSetting.ConnectionString;
			}
			else
			{
				return _connectionString;
			}
		}

		set
		{
			_connectionString =value;
		}
	}

	/// <summary>
	/// 数据服务器类型
	/// </summary>
	public static DbServerType DbServerType
	{
		get
		{
			return BaseInfo.DbSetting.DbServerType;
		}
	}

        /// <summary>
        /// 产品id号        /// </summary>
        public static string COID
        {
            get
            {
                return BaseInfo.DbSetting.COID;
            }
        }

        /// <summary>
        /// 用户编号
        /// </summary>
        public static string UserNO
        {
            get
            {
                return BaseInfo.DbSetting.UserNO;
            }
        }…………


 3、执行select查询语句

		/// <summary>
		/// 执行查询命令
		/// </summary>
		/// <param name="commandString">Sql命令</param>
		/// <param name="datareader">输出DataReader</param>
		public static void RunSelectCommand(
			string connectionString,
			string commandString,
			out IDataReader datareader
			) 
		{
			IDbCommand __command;
			OleDbConnection conn = GetConnection(connectionString);		
			__command = new OleDbCommand(commandString, conn);
			__command.CommandTimeout = 0; //设置等待命令执行的时间为无限期


			if(__command.Connection.State != ConnectionState.Open)
			{
				__command.Connection.Open();
			}
			datareader = __command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

			__command.Dispose();//释放__command
			
		}     
        /// <summary>
        /// 传递连接对象,用于建立临时表的操作,不能每次新建连接对象(否则临时表每次SQL执行完后会自动删除)
        /// </summary>
        /// <param name="commandString">Sql命令</param>
        /// <param name="dataTable">输出数据表</param>
        /// <param name="prams">查询命令参数列表</param>
        public static void RunSelectCommand(
            OleDbConnection conn,
            string commandString,
            out DataTable dataTable,
            params IDbDataParameter[] prams
            )
        {
            IDbDataAdapter __dataadapter;

            DataSet __dataSet;

            __dataadapter = new OleDbDataAdapter(commandString, conn);
            __dataadapter.SelectCommand.CommandTimeout = 0;//设置等待命令执行的时间为无限期

            if (prams != null)
            {
                foreach (IDbDataParameter pram in prams)
                {
                    //if (pram.DbType == DbType.String)
                    //{
                    //    pram.Value = ReplaceSQLEscape(pram.Value);
                    //}
                    __dataadapter.SelectCommand.Parameters.Add(pram);
                }
            }

            __dataSet = new DataSet();
            try
            {
                __dataadapter.Fill(__dataSet);

                dataTable = __dataSet.Tables[0];
            }
            catch (Exception e)
            {
                throw new Exception(commandString, e);
            }

        }

 4、执行存储过程

		#region RunStoredProcedure without out datatable

		public static void RunStoredProcedure(
			string connString,
			string procName
			)
		{
			using(OleDbConnection conn = GetConnection(connString))
			{
				try
				{
					IDbCommand command = conn.CreateCommand();
					command.CommandText = procName;
					command.CommandType = CommandType.StoredProcedure;
					command.CommandTimeout = 0;//设置等待命令执行的时间为无限期

					command.ExecuteNonQuery();
					command.Dispose();
				}
				catch(Exception ex)
				{
					throw new Exception(procName + ":" + ex.Message);
				}
				finally
				{
					conn.Dispose();
				}
			}
		}
		public static void RunStoredProcedure(
			string connString,
			string procName,			
			params IDbDataParameter[] paramsArray)
		{
			using(OleDbConnection conn = GetConnection(connString))
			{
				try
				{
					IDbCommand command = conn.CreateCommand();
					command.CommandText = procName;
					command.CommandType = CommandType.StoredProcedure;
					command.CommandTimeout = 0;//设置等待命令执行的时间为无限期

					foreach(IDbDataParameter param in paramsArray)
					{
						command.Parameters.Add(param);
					}

					command.ExecuteNonQuery();
					command.Dispose();
				}
				catch(Exception ex)
				{
					throw new Exception(procName + ":" + ex.Message);
				}
				finally
				{
					conn.Dispose();
				}
			}
		}
		#endregion

		#region RunStoredProcedure with out datatable
		public static void RunStoredProcedure(
			string connString,
			string procName,			
			out DataTable dataTable)
		{
			OleDbDataAdapter adapter;
			DataSet dataSet;

			using(OleDbConnection conn = GetConnection(connString))
			{
				try
				{
					dataSet = new DataSet();
					IDbCommand command = conn.CreateCommand();
					command.CommandText = procName;
					command.CommandType = CommandType.StoredProcedure;
					command.CommandTimeout = 0;//设置等待命令执行的时间为无限期

					adapter = new OleDbDataAdapter((OleDbCommand)command);
					adapter.Fill(dataSet);
					adapter.Dispose();
					command.Dispose();

					dataTable = dataSet.Tables[0];
				}
				catch(Exception ex)
				{
					throw new Exception(procName + ":" + ex.Message);
				}
				finally
				{
					conn.Dispose();
				}
			}
		}
		public static void RunStoredProcedure(
			string connString,
			string procName,			
			out DataTable dataTable,
			params IDbDataParameter[] paramsArray)
		{
			OleDbDataAdapter adapter;
			DataSet dataSet;
            dataTable = null;
			using(OleDbConnection conn = GetConnection(connString))
			{
				try
				{
					dataSet = new DataSet();
					IDbCommand command = conn.CreateCommand();
					command.CommandText = procName;
					command.CommandType = CommandType.StoredProcedure;
					command.CommandTimeout = 0;//设置等待命令执行的时间为无限期

					foreach(IDbDataParameter param in paramsArray)
					{
						command.Parameters.Add(param);
					}

					adapter = new OleDbDataAdapter((OleDbCommand)command);
					adapter.Fill(dataSet);
					adapter.Dispose();
					command.Dispose();

                    if (dataSet != null && dataSet.Tables.Count > 0)
                    {
                        dataTable = dataSet.Tables[0];
                    }
				}
				catch(Exception ex)
				{
					throw new Exception(procName + ":" + ex.Message);
				}
				finally
				{
					conn.Dispose();
				}
			}
		}
		#endregion


 5、执行sql语句,返回影响数据行

  //返回值表示操作影响的记录数
		public static int RunCommand(
			string connectionString,
			string commandString,			
			params IDbDataParameter[] prams
			) 
		{
			IDbCommand __command;
            int __rtnRowCount = -1;
			using(OleDbConnection conn = GetConnection(connectionString))
			{
				__command = new OleDbCommand(commandString,conn);
				__command.CommandTimeout = 0; //设置等待命令执行的时间为无限期

				if(prams != null)
				{
					foreach(IDbDataParameter pram in prams)
					{
						__command.Parameters.Add(pram);
					}
				}
				
				if(__command.Connection.State != ConnectionState.Open)
				{
					__command.Connection.Open();
				}
                __rtnRowCount = __command.ExecuteNonQuery();

				__command.Dispose();
			}

            return __rtnRowCount;

		}


        /// <summary>
        /// 传递连接对象,用于建立临时表的操作,不能每次新建连接对象(否则临时表每次SQL执行完后会自动删除)
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="commandString"></param>
        /// <param name="prams"></param>
        public static int RunCommand(
            OleDbConnection conn,
            string commandString,
            params IDbDataParameter[] prams
            )
        {
            IDbCommand __command;
            int __rtnRowCount = -1;
            __command = new OleDbCommand(commandString, conn);
            __command.CommandTimeout = 0; //设置等待命令执行的时间为无限期

            if (prams != null)
            {
                foreach (IDbDataParameter pram in prams)
                {
                    __command.Parameters.Add(pram);
                }
            }

            if (__command.Connection.State != ConnectionState.Open)
            {
                __command.Connection.Open();
            }
            __rtnRowCount=__command.ExecuteNonQuery();

            __command.Parameters.Clear();

            return __rtnRowCount;

        }



 

 

 

 

posted on 2010-09-05 16:11  linzheng  阅读(776)  评论(0编辑  收藏  举报

导航