数据库操作基本方法实现

简介:

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

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;

        }

 

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1081898


相关文章
|
10月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1562 1
|
数据库
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
|
8月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
762 10
|
9月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
445 11
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
765 174
|
11月前
|
存储 算法 Java
实现不同数据库的表间的 JOIN 运算的极简方法
跨库计算是数据分析中的常见难题,尤其涉及多数据库系统时,表间 JOIN 操作复杂度显著提升。esProc 提供了一种高效解决方案,能够简化跨库 JOIN 的实现。例如,在车辆管理、交管和公民信息系统中,通过 esProc 可轻松完成如下任务:按城市统计有车公民事件数量、找出近一年获表彰的车主信息,以及按年份和品牌统计车辆违章次数。esProc 支持不同关联场景(如维表关联与主子表关联)的优化算法,如内存索引、游标处理和有序归并,从而大幅提升编码和运算效率。无论是同构还是异构数据源,esProc 均能灵活应对,为复杂数据分析提供强大支持。
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2418 28
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
422 16

热门文章

最新文章