先创建一个基本的SqlHelperBase,用于继承和实现数据库操作功能:

using System.Data;
using System.Data.SqlClient;
using System.Text;namespace RongZi.DBUtility
{public class SqlHelperBase{#region 属性public string ConnStr;private SqlConnection conn = null;//数据库链接对象 private SqlCommand cmd = null;//数据库操作private SqlDataReader sdr = null;//数据集#endregion 属性#region 基本用法/// <summary>/// 链接数据库/// </summary>/// <returns></returns>private SqlConnection GetConn(){conn = new SqlConnection(ConnStr);if (conn.State == ConnectionState.Closed){conn.Open();}return conn;}/// <summary>/// 增删改 INSERT|DELETE|UPDATE/// SqlParameter[] paras = new SqlParameter[]{new SqlParameter("@Name",DBNull.Value),}; /// </summary>public int ExecuteNonQuery(string sqlStr, SqlParameter[] sqlparas = null){using (cmd = new SqlCommand(sqlStr, GetConn())){//cmd.CommandTimeout = 600;if (sqlparas != null) cmd.Parameters.AddRange(sqlparas);int res = cmd.ExecuteNonQuery();conn.Close();return res;}}/// <summary>/// 查 SELECT/// SqlParameter[] paras = new SqlParameter[]{new SqlParameter("@Name",DBNull.Value),}; /// </summary>public DataTable ExecuteReader(string sqlStr, SqlParameter[] sqlparas = null){using (cmd = new SqlCommand(sqlStr, GetConn())){cmd.CommandTimeout = 600;DataTable dt = new DataTable();if (sqlparas != null) cmd.Parameters.AddRange(sqlparas);using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){dt.Load(sdr);}conn.Close();return dt;}}/// <summary>/// 执行查询,并返回查询所返回的结果集中第一行的第一列。 如:/// insert一条数据,返回自增的id值:insert into table([NAME])values ('名字');Select @@Identity;/// </summary>public object ExecuteScalar(string sqlStr, SqlParameter[] sqlparas = null){using (cmd = new SqlCommand(sqlStr, GetConn())){cmd.CommandTimeout = 600;if (sqlparas != null) cmd.Parameters.AddRange(sqlparas);object res = cmd.ExecuteScalar();conn.Close();return res;}}#endregion 基本用法#region 存储过程/// <summary>/// 执行存储过程/// </summary>/// <param name="proc">存储过程名称</param>/// <param name="spArr">参数</param>/// <returns>受影响的行数</returns>public int ExecuteNonQuery_ForProc(string proc, SqlParameter[] spArr = null){cmd = new SqlCommand(proc, GetConn());//cmd.CommandTimeout = 600;cmd.CommandType = CommandType.StoredProcedure;if (spArr != null) cmd.Parameters.AddRange(spArr);int i = cmd.ExecuteNonQuery();conn.Close();return i;}/// <summary>/// 执行存储过程-带输出参数(最后一个参数)/// </summary>/// <param name="proc">存储过程名称</param>/// <param name="spArr">参数</param>/// <returns>输出参数的值</returns>public object ExecuteNonQuery_ForProc_Output(string ProcName, SqlParameter[] parm){cmd = new SqlCommand(ProcName, GetConn());//cmd.CommandTimeout = 600;//最后一个参数为输出参数parm[parm.Length - 1].Direction = ParameterDirection.Output;cmd.CommandType = CommandType.StoredProcedure;if (parm != null){cmd.Parameters.AddRange(parm);}int result = cmd.ExecuteNonQuery();conn.Close();//返回输出的参数,看存储过程中定义的输出参数是什么类型,这里就转换成什么类型return parm[parm.Length - 1].Value;}#endregion#region 事物/// <summary>/// 事物-执行多条操作(INSERT|UPDATE|DELETE)语句/// </summary>/// <param name="Sqlstr">sql语句数组</param>/// <returns></returns>public int ExecTran(string[] Sqlstr){conn = GetConn();SqlTransaction tran = conn.BeginTransaction();//开始事物cmd = new SqlCommand();cmd.Connection = conn;cmd.Transaction = tran;//cmd.CommandTimeout = 600;try{int count = Sqlstr.Length;for (int i = 0; i < count; i++){cmd.CommandText = Sqlstr[i];cmd.ExecuteNonQuery();}tran.Commit();//提交事物return 1;}catch{tran.Rollback();//回滚事物return 0;}finally{conn.Close();tran.Dispose();}}#endregion#region 常用方法public DataTable SELECT(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteReader(sqlStr, sqlparas);}public int COUNT(string sqlStr, SqlParameter[] sqlparas = null){int i = 0;object obj = ExecuteScalar(sqlStr, sqlparas);int.TryParse(obj.ToString(), out i);return i;}public int INSERT(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteNonQuery(sqlStr, sqlparas);}public int UPDATE(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteNonQuery(sqlStr, sqlparas);}public int DELETE(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteNonQuery(sqlStr, sqlparas);}public int DELETE(string table, string key, object keyValue){string sqlStr = "DELETE FROM [" + table + "] WHERE [" + key + "]='" + keyValue + "'";return ExecuteNonQuery(sqlStr);}#endregion#region 特殊方法 public DataTable Query(string sqlStr){return ExecuteReader(sqlStr);}public DataTable Query(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteReader(sqlStr, sqlparas);}/// <summary>/// 执行Insert、Update、Delete,返回操作的行数/// </summary>public int ExecuteSql(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteNonQuery(sqlStr, sqlparas);}/// <summary>/// 执行Insert,并返回新增的主键id/// </summary>public object GetSingle(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteScalar(sqlStr, sqlparas);}/// <summary>/// 判断是否存在/// </summary>public bool Exists(string sqlStr, SqlParameter[] sqlparas = null){DataTable dt = ExecuteReader(sqlStr, sqlparas);if (dt != null && dt.Rows.Count > 0){return true;}else{return false;}}//获取数据public DataTable GetData(string sqlStr, SqlParameter[] sqlparas = null){return ExecuteReader(sqlStr, sqlparas);}/// <summary>/// 简单单表查询/// </summary>/// <param name="TableName">必填</param>/// <param name="Top"></param>/// <param name="fldName"></param>/// <param name="strWhere"></param>/// <param name="orderBy"></param>/// <returns></returns>public DataTable GetData(string TableName, int Top = 0, string fldName = "", string strWhere = "", string orderBy = ""){StringBuilder strSql = new StringBuilder();strSql.Append("SELECT ");if (Top > 0){strSql.AppendFormat(" TOP {0} ", Top);}if (!string.IsNullOrEmpty(fldName)){strSql.AppendFormat(fldName + " FROM {0}", TableName);}else{strSql.AppendFormat(" * FROM {0}", TableName);}if (!string.IsNullOrEmpty(strWhere)){strSql.Append(" WHERE " + strWhere);}if (!string.IsNullOrEmpty(orderBy)){strSql.Append(" ORDER BY " + orderBy);}DataTable dt = ExecuteReader(strSql.ToString());return dt;}public int GetCount(string TableName, string strWhere = ""){StringBuilder strSql = new StringBuilder();strSql.Append("select COUNT(*) from " + TableName);if (!string.IsNullOrEmpty(strWhere)){strSql.Append(" where " + strWhere);}int i = 0;object obj = ExecuteScalar(strSql.ToString());int.TryParse(obj.ToString(), out i);return i;}/// <summary>/// SQL分页查询/// </summary>/// <param name="TableName">表名</param>/// <param name="fldName">显示字段</param>/// <param name="strWhere">where条件</param>/// <param name="orderBy">排序</param>/// <param name="PageSize">每页多少数据</param>/// <param name="PageIndex">当前第几页</param>/// <returns></returns>public DataTable PAGING(string TableName, string fldName, string strWhere, string orderBy, int PageSize = 500, int PageIndex = 1){StringBuilder strSql = new StringBuilder();strSql.AppendLine("DECLARE @PageSize INT;");strSql.AppendLine("DECLARE @PageIndex INT;");strSql.AppendLine("SET @PageSize=" + PageSize + ";");strSql.AppendLine("SET @PageIndex=" + PageIndex + ";");strSql.Append("SELECT ");if (!string.IsNullOrEmpty(fldName)){strSql.Append(fldName + " FROM (");}else{strSql.Append(" * FROM (");}strSql.AppendFormat(" SELECT ROW_NUMBER() OVER(ORDER BY {0}) rownum,", orderBy);if (!string.IsNullOrEmpty(fldName)){strSql.AppendFormat(fldName + " FROM {0}", TableName);}else{strSql.AppendFormat(" * FROM {0}", TableName);}if (!string.IsNullOrEmpty(strWhere)){strSql.AppendLine(" WHERE " + strWhere);}strSql.AppendLine(" )a");strSql.AppendLine(" WHERE rownum > @PageSize * (@PageIndex - 1) AND rownum <= @PageSize * @PageIndex ");if (!string.IsNullOrEmpty(orderBy)){strSql.Append(" ORDER BY " + orderBy);}DataTable dt = ExecuteReader(strSql.ToString());return dt;}/// <summary>/// SQL分页查询 /// 该语法支持SQL Server2012及以上版本/// </summary>/// <param name="TableName">表名(必填)</param>/// <param name="fldName">显示字段(缺省为:*)</param>/// <param name="strWhere">查询条件</param>/// <param name="orderBy">排序条件</param>/// <param name="PageSize">每页行数</param>/// <param name="PageIndex">第几页</param>/// <returns></returns>public DataTable PAGING_2012(string TableName, string fldName, string strWhere, string orderBy = "", int PageSize = 500, int PageIndex = 1){StringBuilder strSql = new StringBuilder();strSql.Append("SELECT ");if (!string.IsNullOrWhiteSpace(fldName)){strSql.AppendFormat(fldName + " FROM {0}", TableName);//指定字段}else{strSql.AppendFormat(" * FROM {0}", TableName);//全部字段}if (!string.IsNullOrWhiteSpace(strWhere)){strSql.Append(" WHERE " + strWhere);}if (!string.IsNullOrWhiteSpace(orderBy)){strSql.AppendFormat(" order by {0} offset {1} rows fetch next {2} rows only ", orderBy, (PageIndex - 1) * PageSize, PageSize);}else{strSql.AppendFormat(" order by 1 offset {0} rows fetch next {1} rows only ", (PageIndex - 1) * PageSize, PageSize);//默认以第1个字段排序}//解释一下:offset N rows 跳过前N条,fetch next M rows only 获取下面的M条信息。DataTable dt = ExecuteReader(strSql.ToString());return dt;}/// <summary>/// SQL分页查询 /// 该语法支持SQL Server2012及以上版本/// </summary>/// <param name="sqlStr">sql语句</param>/// <param name="orderBy">排序</param>/// <param name="PageSize">每页行数</param>/// <param name="PageIndex">第几页</param>/// <returns></returns>public DataTable PAGING_2012(string sqlStr, string orderBy = "", int PageSize = 500, int PageIndex = 1){StringBuilder strSql = new StringBuilder();strSql.Append(sqlStr);if (!string.IsNullOrWhiteSpace(orderBy)){strSql.AppendFormat(" order by {0} offset {1} rows fetch next {2} rows only ", orderBy, (PageIndex - 1) * PageSize, PageSize);}else{strSql.AppendFormat(" order by 1 offset {0} rows fetch next {1} rows only ", (PageIndex - 1) * PageSize, PageSize);//默认以第1个字段排序}//解释一下:offset N rows 跳过前N条,fetch next M rows only 获取下面的M条信息。DataTable dt = ExecuteReader(strSql.ToString());return dt;}/// <summary>/// DataTable分页查询/// </summary>/// <param name="data">DataTable</param>/// <param name="allPage">一共有几页</param>/// <param name="PageSize">每页几行数据</param>/// <param name="PageIndex">第几页</param>/// <returns></returns>public DataTable GetDataTablePage(DataTable data, out int allPage, int PageSize = 500, int PageIndex = 1){allPage = data.Rows.Count / PageSize;allPage += data.Rows.Count % PageSize == 0 ? 0 : 1;DataTable dt = data.Clone();int startIndex = PageIndex * PageSize;int endIndex = startIndex + PageSize > data.Rows.Count ? data.Rows.Count : startIndex + PageSize;if (startIndex < endIndex){for (int i = startIndex; i < endIndex; i++){dt.ImportRow(data.Rows[i]);}}return dt;}/// <summary>/// 获取最大ID/// </summary>/// <param name="tableName">表名</param>/// <param name="idRow">主键的列名</param>/// <param name="addOne">是否+1</param>/// <returns></returns>public int GetMaxID(string tableName, string idRow, bool addOne = false){int i = 0;string sql = "SELECT ISNULL(MAX([" + idRow + "]),0) FROM [" + tableName + "]";object obj = ExecuteScalar(sql);int.TryParse(obj.ToString(), out i);if (addOne == true)//+1{return i + 1;}return i;}#endregion}
}

创建SqlHelper子类,继承父类,仅仅给父类提供数据库链接字符串:

using System.Configuration;public class TestSqlHelper : SqlHelperBase//①继承父类SqlHelperBase{public TestSqlHelper()//②创建构造函数{base.ConnStr = ConfigurationManager.ConnectionStrings["TianmaoData"].ConnectionString;//③改写父类连接字符串           }}

调用子类:

        public ActionResult Test(){string sql = "SELECT COUNT(*) cc  FROM [TableName]";TestSqlHelper ts = new TestSqlHelper();ViewBag.COUNT = ts.COUNT(sql);return View();}

说明:

  1. 父类不可有 static,静态的不会被子类继承,值永远是null;
  2. 子类在“构造函数”里修改父类的变量值;
  3. 子类修改父类的值用:base.父类的参数=新值;
  4. 举例:base.ConnStr = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;

同一个SqlHelper链接不同的数据库相关推荐

  1. linux链接达梦数据库,linux下面 达梦数据库的JDBC链接

    此次由于学习上面的事情,接触到了达梦数据库,这是第一次用,去年有个关于隐通道的课程设计,其实就已经差很少算了解了点点,相对与国外主流数据库,Dm7有个很明显的特色,那就是它的安全级别,国外数据卖给中国 ...

  2. python建立数据库和基本表_python基础 — 链接 Mysql 创建 数据库和创表

    重点: 1. 链接服务器的数据库 2. 创建表和格式 3. 插入多行数据 import pymysql try: host='xxx' user='xxx' passwd='xxx' db='test ...

  3. 简单的PL/SQl链接远程ORACLE数据库方法

    简单的PL/SQl链接远程ORACLE数据库方法 PLSQL Developer新手使用教程 pasting 转载于:https://www.cnblogs.com/jing1617/p/724156 ...

  4. 使用IDEA 的DBMS 链接达梦数据库

    使用IDEA 的DBMS 链接达梦数据库 本机环境 系统 软件 JDK 环境 Win10 64 位 DM 8 17 第一步 首先需要载入达梦的相关驱动程序,本文使用 DmJdbcDriver17.ja ...

  5. 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点   用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...

  6. php mysql简单链接_php mysql 数据库链接简单例子

    这里是面向过程的mysql链接,两个文件,config.php和conn.php,只是记录一下,不喜勿喷,也希望有好的建议,代码如下: config.php /* * 与数据库链接有关的配置变量保存在 ...

  7. django 链接多个数据库 并使用原生sql

    settings文件如下: DATABASES = {     'default': {         'ENGINE': 'django.db.backends.sqlite3',         ...

  8. 为什么链接不上mysql数据库_java链接不上数据库,怎么解决!

    居正w 去年刚好做过这个,给你贴下我的链接代码try {        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver ...

  9. php链接本地mysql数据库配置文件_php连接 mysql 数据库如何添加一个公共的配置文件...

    展开全部 php面向对象文件名DB.class.php<?php header("content-type:text/html;charset=utf-8"); class  ...

最新文章

  1. jpa 每次启动都要创建外键索引_索引(五)索引数据结构
  2. 改善EF代码的方法(下)
  3. 自学转行学AI人工智能怎么样?
  4. linux内核线性地址等于物理地址,Linux 从虚拟地址到物理地址
  5. 获取当前周、上一周、下一周日期
  6. 请大家慎用联想笔记本的NOVO功能
  7. ABBYY PDF Transformer+功能概述
  8. 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
  9. Tensorflow2.0深度学习框架的搭建与环境配置
  10. 基于Python的指数基金量化投资——估值数据的直接获取
  11. JAVA基础案例教程——模拟物流快递系统程序设计
  12. 想要Linux上云?如何实现Linux工作流上云部署
  13. 基于 Spark 的文本情感分析
  14. win2008 mysql 群集_win2003服务器下配置 MySQL 群集(Cluster)的方法 -电脑资料
  15. html如何让文字变斜体,CSS中如何让文字变成斜体
  16. Bellman 贝尔曼方程究竟是什么
  17. Redisson(2-3)分布式锁实现对比 VS Java的ReentrantLock的FairLock
  18. 每周全球科技十大新闻(2021.6.21-6.27)
  19. 一起弄个微信订阅号鉴黄机器人
  20. 微信小程序如何实现(点击发送弹幕)

热门文章

  1. STM32配置看门狗
  2. String.valueOf() 方法的使用
  3. Spring框架组成
  4. 手机用Postern配置socks5全局代理详细教程
  5. 土壤水分传感器的内部构造
  6. linux安装 xen,Centos安装Xen总结
  7. 微信对账单处理-PHP
  8. 数学建模 河北杯 无人机侦听与反制问题问题3的解决思路
  9. java 动态数组_Java动态数组的用法详解
  10. DIY你的博客工具箱!(zeo制作)