常用的增删改查函数

无论做什么系统,涉及到数据库肯定离不开增删改查,下面是自己写的有关数据库增删改查封装的函数,仅供参考。

using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

using OnLineExam.HelperClass;
using OnLineExam.CommonClass;

namespace OnLineExam.DataBaseClass

{
  // 数据库接口类
	public class DataBase
	{
		//私有变量,数据库连接
		protected SqlConnection Connection;
        protected string ConnectionString;

		//构造函数
		public DataBase()
		{
            ConnectionString = "Data Source=(local);DataBase=mrOnLineExam;User ID=sa;Password=123456;";
        }
		//保护方法,打开数据库连接
		private void Open()
		{
		  //判断数据库连接是否存在
			if (Connection == null)
			{
			  //不存在,新建并打开
				Connection = new SqlConnection(ConnectionString);
				Connection.Open();
			}
			else
			{
			  //存在,判断是否处于关闭状态
			  if (Connection.State.Equals(ConnectionState.Closed))
				  Connection.Open();    //连接处于关闭状态,重新打开
			}
		}

		//公有方法,关闭数据库连接
		public void Close()
		{
			if (Connection.State.Equals(ConnectionState.Open))
			{
                Connection.Close();     //连接处于打开状态,关闭连接
			}
		}

        /// <summary>
		/// 析构函数,释放非托管资源
		/// </summary>
		~DataBase()
		{
			try
			{
				if (Connection != null)
					Connection.Close();
			}
			catch{}
			try
			{
				Dispose();
			}
			catch{}
		}

		//公有方法,释放资源
		public void Dispose()
		{
			if (Connection != null)		// 确保连接被关闭
			{
				Connection.Dispose();
				Connection = null;
			}
		}		

		//公有方法,根据Sql语句,返回是否查询到记录
		public bool GetRecord(string XSqlString)
		{
            Open();
            SqlDataAdapter adapter = new SqlDataAdapter(XSqlString, Connection);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            Close();

            if (dataset.Tables[0].Rows.Count > 0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}

		//公有方法,返回Sql语句获得的数据值
		//SqlString的格式:select count(*) from XXX where ...
		//                 select max(XXX) from YYY where ...
		public int GetRecordCount(string XSqlString)
		{
            string SCount;

			Open();
			SqlCommand Cmd = new SqlCommand(XSqlString,Connection);
            SCount = Cmd.ExecuteScalar().ToString().Trim();
            if (SCount=="")
            SCount="0";
			Close();
			return Convert.ToInt32(SCount);
		}			

		//公有方法,根据XWhere更新数据表XTableName中的某些纪录
		//XTableName--表名
		//XHT--哈希表,键为字段名,值为字段值
		public DataSet AdvancedSearch(string XTableName, Hashtable XHT)
		{
			int Count = 0;

			string Fields = "";
			foreach(DictionaryEntry Item in XHT)
			{
				if (Count != 0)
				{
					Fields += " and ";
				}
				Fields += Item.Key.ToString();
				Fields += " like '%";
				Fields += Item.Value.ToString();
                Fields += "%'";
				Count++;
			}
			Fields += " ";

			string SqlString = "select * from " + XTableName + " where " + Fields;
            Open();
            SqlDataAdapter Adapter = new SqlDataAdapter(SqlString, Connection);
            DataSet Ds = new DataSet();
            Adapter.Fill(Ds);
            Close();
            return Ds;

		}		

        //私有方法,获得一个用来调用存储过程的SqlCommand
        //输入:
        //      ProcName - 存储过程名
        //      Params   - 用来调用存储过程的参数表
        private SqlCommand CreateCommand(string ProcName, SqlParameter[] Prams)
        {
          Open();
          SqlCommand Cmd = new SqlCommand(ProcName, Connection);
          Cmd.CommandType = CommandType.StoredProcedure;

          if (Prams != null)
          {
            foreach (SqlParameter Parameter in Prams)
              Cmd.Parameters.Add(Parameter);
          }

          return Cmd;
        }

        //私有方法,执行SQL命令
        //输入:
        //      StrName - 存储过程名
        //      Params   - 用来调用存储过程的参数表
        private SqlCommand CreateStrCommand(string StrName, SqlParameter[] Prams)
        {
            Open();
            SqlCommand Cmd = new SqlCommand(StrName, Connection);
            Cmd.CommandType = CommandType.Text;

            if (Prams != null)
            {
                foreach (SqlParameter Parameter in Prams)
                    Cmd.Parameters.Add(Parameter);
            }

            return Cmd;
        }

        //公有方法,实例化一个用于调用存储过程的参数
        //输入:
        //      ParamName - 参数名称
        //      DbType		- 参数类型
        //      Size			- 参数大小
        //			Direction - 传递方向
        //			Value			- 值
        public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
        {
          SqlParameter Param;

          if(Size > 0)
            Param = new SqlParameter(ParamName, DbType, Size);
          else Param = new SqlParameter(ParamName, DbType);

          Param.Direction = Direction;

          if (Value != null)
            Param.Value = Value;

          return Param;
        }

		//公有方法,实例化一个用于调用存储过程的输入参数
		//输入:
		//      ParamName - 参数名称
		//      DbType		- 参数类型
		//      Size			- 参数大小
		//			Value			- 值
        public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
        {
          return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
        }		

        //公有方法,调用存储过程(不带参数)
		    //输入:
		    //			ProcName存储过程名
        //输出:
		    //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
        public int RunProc(string ProcName)
        {
		    int Count = -1;
            SqlCommand Cmd = CreateCommand(ProcName, null);
            Count = Cmd.ExecuteNonQuery();
            Close();
			return Count;
        }

        //公有方法,调用存储过程(不带参数)
        //输入:
        //			ProcName存储过程名
        //输出:
        //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
        public int RunStr(string StrName)
        {
            int Count = -1;
            SqlCommand Cmd = CreateStrCommand(StrName, null);
            Count = Cmd.ExecuteNonQuery();
            Close();
            return Count;
        }

        //公有方法,调用存储过程(带参数)
        //输入:
        //      ProcName - 存储过程名
        //      Params   - 用来调用存储过程的参数表
        //输出:
        //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
        public int RunProc(string ProcName, SqlParameter[] Params)
        {
            int Count = -1;
            SqlCommand Cmd = CreateCommand(ProcName, Params);
            Count = Cmd.ExecuteNonQuery();
            Close();
            return Count;
        }

        //公有方法,执行指定SQL语句
        //输入:
        //      ProcStr - SQL语句
        //输出:
        //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
        public int ProcStr(string StrName,SqlParameter[] Params)
        {
            int Count = -1;
            SqlCommand Cmd = CreateStrCommand(StrName, Params);
            Count = Cmd.ExecuteNonQuery();
            Close();
            return Count;
        }

        //公有方法,调用存储过程(不带参数)
        //输入:
        //			ProcName存储过程名
		    //输出:
        //			将执行结果以SqlDataReader返回
		    //注意:使用后主意调用SqlDataReader.Close()方法
        public SqlDataReader RunProcGetReader(string ProcName)
        {
          SqlCommand Cmd = CreateCommand(ProcName, null);
          return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        }

		//公有方法,调用存储过程(带参数)
		//输入:
		//			ProcName - 存储过程名
		//      Params	 - 存储过程需要的参数
		//输出:
		//			将执行结果以SqlDataReader返回
		//注意:使用后主意调用SqlDataReader.Close()方法
        public SqlDataReader RunProcGetReader(string ProcName, SqlParameter[] Params)
        {
          SqlCommand Cmd = CreateCommand(ProcName, Params);
          return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        }

        //公有方法,执行SQL命令
        //输入:
        //			StrName - 存储过程名
        //      Params	 - 执行SQL命令需要的参数
        //输出:
        //			将执行结果以SqlDataReader返回
        //注意:使用后主意调用SqlDataReader.Close()方法
        public SqlDataReader RunStrGetReader(string StrName, SqlParameter[] Params)
        {
            SqlCommand Cmd = CreateStrCommand(StrName, Params);
            return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        }

        //公有方法,调用存储过程(带参数)
        //输入:
        //		ProcName - 存储过程名
        //      Params	 - 存储过程需要的参数
        //输出:
        //			将执行结果以SqlDataReader返回
        //注意:使用后主意调用SqlDataReader.Close()方法
        public int RunProcGetCount(string ProcName, SqlParameter[] Params)
        {
            SqlCommand Cmd = CreateCommand(ProcName, Params);
            string SCount;
            SCount = Cmd.ExecuteScalar().ToString().Trim();
            if (SCount == "")
                SCount = "0";
            Close();
            return Convert.ToInt32(SCount);
        }

        //公有方法,调用存储过程(不带参数)
        //输入:
        //			ProcName存储过程名
        //输出:
        //			将执行结果以DataSet返回
        public DataSet GetDataSet(string ProcName)
        {
            Open();
            SqlDataAdapter adapter = new SqlDataAdapter(ProcName, Connection);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            Close();
            return dataset;
        }

        //公有方法,执行SQL命令
        //输入:
        //			StrName存储过程名
        //输出:
        //			将执行结果以DataSet返回
        public DataSet GetStrDataSet(string StrName)
        {
            Open();
            SqlDataAdapter adapter = new SqlDataAdapter(StrName, Connection);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            Close();
            return dataset;
        }

        //公有方法,调用存储过程(不带参数)
        //输入:
        //			ProcName存储过程名
        //输出:
        //			将执行结果以DataSet返回
        public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
        {
            Open();
            SqlCommand Cmd = CreateCommand(ProcName, Params);
            SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            Close();
            return dataset;
        }
        //公有方法,调用存储过程(不带参数)
        //输入:
        //			ProcName存储过程名
        //输出:
        //			将执行结果以DataSet返回
        public DataSet GetStrDataSetSql(string StrName, SqlParameter[] Params)
        {
            Open();
            SqlCommand Cmd = CreateStrCommand(StrName, Params);
            SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            Close();
            return dataset;
        }

        //公有方法,根据Sql语句,返回一个结果数据集
        public DataSet GetDataSetSql(string XSqlString)
        {
            Open();
            SqlDataAdapter Adapter = new SqlDataAdapter(XSqlString, Connection);
            DataSet Ds = new DataSet();
            Adapter.Fill(Ds);
            Close();
            return Ds;
        }
        //公有方法,根据Sql语句,插入记录
        public int Insert(string XSqlString)
        {
            int Count = -1;
            Open();
            SqlCommand cmd = new SqlCommand(XSqlString, Connection);
            Count = cmd.ExecuteNonQuery();
            Close();
            return Count;
        }
        //公有方法,根据Sql语句,插入记录并返回生成的ID号
        public int GetIDInsert(string XSqlString)
        {
            int Count = -1;
            Open();
            SqlCommand cmd = new SqlCommand(XSqlString, Connection);
            Count = Convert.ToInt32(cmd.ExecuteScalar().ToString().Trim());
            Close();
            return Count;
        }
        /// 公有方法,获取数据,返回一个DataRow。
        public DataRow GetDataRow(String SqlString)
        {
            DataSet dataset = GetDataSet(SqlString);
            dataset.CaseSensitive = false;
            if (dataset.Tables[0].Rows.Count > 0)
            {
                return dataset.Tables[0].Rows[0];
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 公有方法,更新一个数据表。
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
        /// <param name="Where">Where子句</param>
        /// <returns>是否成功</returns>
        public bool Update(String TableName, Hashtable Cols, String Where)
        {
            int Count = 0;
            if (Cols.Count <= 0)
            {
                return true;
            }
            String Fields = " ";
            foreach (DictionaryEntry item in Cols)
            {
                if (Count != 0)
                {
                    Fields += ",";
                }
                Fields += "[" + item.Key.ToString() + "]";
                Fields += "=";
                Fields += item.Value.ToString();
                Count++;
            }
            Fields += " ";

            String SqlString = "Update " + TableName + " Set " + Fields + Where;

            String[] Sqls = { SqlString };
            return ExecuteSQL(Sqls);
        }
        public bool ExecuteSQL(String[] SqlStrings)
        {
            bool success = true;
            Open();
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = Connection.BeginTransaction();
            cmd.Connection = Connection;
            cmd.Transaction = trans;

            int i = 0;
            try
            {
                foreach (String str in SqlStrings)
                {
                    cmd.CommandText = str;
                    cmd.ExecuteNonQuery();
                    i++;
                }
                trans.Commit();
            }
            catch
            {
                success = false;
                trans.Rollback();
                Close();
            }
            finally
            {
                Close();
            }
            return success;
        }
        /// <summary>
        /// 公有方法,获取数据,返回一个DataTable。
        /// </summary>
        /// <param name="SqlString">Sql语句</param>
        /// <returns>DataTable</returns>
        public DataTable GetDataTable(String SqlString)
        {
            DataSet dataset = GetDataSet(SqlString);
            dataset.CaseSensitive = false;
            return dataset.Tables[0];
        }
	}
}
时间: 2024-12-17 16:59:33

常用的增删改查函数的相关文章

Android学习笔记之SQLite数据库的使用及常用的增删改查方法、无sql语句的DRUD方法汇总

(1)目录结构如下: (2)链接数据库的文件:DBHelper.java要继承SQLiteOpenHelper类 package com.lc.sqlite_demo1.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLit

【sql server常用操作{增删改查}】

use DB_x   go   drop database DB_y   create database DB_y --创建数据库   on primary --指定主数据文件   (   name=db, --逻辑名   filename='d:\db.mdf', --文件位置   size=3MB, --初始大小   maxsize=10MB, --最大增长   filegrowth=1MB --增长方式   )   log on --指定日志文件   (   name=ldb,   fil

Yii2 中常用的增删改查操作总结

一.新增 1.使用save() $model = new User(); $model->name = 'test'; $model->phone = '13000000000'; $model->email = '[email protected]'; $model->save(); 2.使用createCommand 原生sql $sql = "insert into user (name, phone, email) values ('test', '1300000

mongodb的安装与增删改查

mongodb是一款分布式的文件存储的数据库,注意这两个词,分布式和文件存储.mongodb支持复制和分片,可以合理的运用空间的大小,也可以达到容灾的目的.另外文件存储也是一个特点,抛弃了传统的表的概念,使用了集合的概念,下面是对应图 另外一个mongodb具有的优势便是其具有一个javascript的shell,你可以在这里使用纯js的语法. 目前mongodb的版本是3.X版本的,其api相对于2.x版本的变化了不少,包括很多常用的增删改查的命令都有所变化. 首先,下载mongodb,然后c

通用DAO之MyBatis封装,封装通用的增删改查(二)

曾经发过一篇文章,大概写的就是阿海多么多么厉害,见到某位同事在Hibernate的基础上封装了一下,就以一己之力开发什么什么框架,最后写了个超大的一坨的事. 那么,后续篇来了.阿海不是自负之人,当之前的CRUD框架并没有达到理想的结果时,阿海转向了Mybatis封装.别问我为什么不是Hibernate.我本来就不喜欢Hibernate,即使在之前的一家公司一直被强制性的约束使用Hibernate时,也没有对Hibernate产生什么真正的好感,反而屡次发现了Hibernate的一些问题. 或许是

如何实现最基本的课程管理系统(程序库的增删改查)

一直在听建民老师说,javaweb的精髓是Jsp+servlet+javabean.在完成这个系统之前,毕竟没有学习过javaweb,Jsp和servlet我是知道的,但不会在servlet和jsp之间相互传值以及应用,javabean是一点没有听说过.在这样的基础下,没办法逃脱测试的情况下,只能硬着头皮做了.数据库这方面,之前安装过mysql和可视化工具Navicat,但没有在eclipse中连接过,在数据库连接这方面基本也是空白.在慕课网和bilibili上找了无数视频,终于有了点头绪,下面

JavaWeb系统(增删改查、多条件查询功能)

该系统是一个简单的青年服务管理系统,主要包括了较完整的常用的增删改查以及多条件查询功能,对于初学者有很大帮助. 下面是相关的Java代码.jsp页面.以及数据库的创建和相关表的设计 java代码 首先是相关包的创建,如截图所示(使用的是eclipse软件) package com.user; public class User { private int id; private String name; private String sex; private String mianzu; pri

MYSQL的常用命令和增删改查语句和数据类型

连接命令:<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a> -h[主机地址] -u[用户名] -p[用户密码] 创建<a href="http://lib.csdn.net/base/my

数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)

SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15') 1.2[将现有表数据添加到一个已有表]insert into <已有的新表> (列名) select <原表列名> from <原表名>例:insert into tongxunlu ('姓名','地址','