数据库操作基本方法实现

简介:

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

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


相关文章
|
3月前
|
存储 关系型数据库 MySQL
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
330 2
|
18天前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
29 11
|
17天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
2月前
|
消息中间件 关系型数据库 数据库
Python实时监测数据库表数据变化的方法
在实现时,需要考虑到应用的实时性需求、数据库性能影响以及网络延迟等因素,选择最适合的方法。每种方法都有其适用场景和限制,理解这些方法的原理和应用,将帮助开发者在实际项目中做出最合适的技术选择。
105 17
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
28 4
|
2月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
17天前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
19天前
|
Java API 数据库
Data jpa 增删改查的方法分别有哪些
Data jpa 增删改查的方法分别有哪些
|
2月前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
2月前
|
存储 测试技术 数据库
数据库备份方法
数据库备份方法
52 2