DbHelper

摘要:
使用系统;使用System.Collections。通用的使用系统。配置使用系统。数据使用System.Data。SqlClient;使用系统。Linq;使用系统。文本命名空间Asmkt。数据库{//////SQL数据库帮助///˂/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
namespace Asmkt.Database
{
    /// <summary>
    /// SQL数据库帮助
    /// </summary>
    public sealed class SqlDatabaseHelper
    {
        #region 属性
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public string ConnectionString
        { get; set; }
        #endregion 属性
        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="configurationName">配置名称</param>
        public SqlDatabaseHelper(string configurationName = null)
        {
            ConnectionStringSettings config = ConfigurationManager.ConnectionStrings[0];
            if (!string.IsNullOrWhiteSpace(configurationName))
                config = ConfigurationManager.ConnectionStrings[configurationName];
            ConnectionString = config.ConnectionString;
        }
        #endregion 构造函数
        #region 静态成员方法
        /// <summary>
        /// 通过指定的数据库连接获得数据库处理事务
        /// </summary>
        /// <param name="conn">数据库连接</param>
        /// <param name="transactionName">事务名称</param>
        /// <param name="isolationLevel">事务隔离级别</param>
        /// <returns>数据库处理事务</returns>
        public static SqlTransaction GetTransaction(
            SqlConnection conn,
            string transactionName=null,
            IsolationLevel isolationLevel= IsolationLevel.Chaos)
        {
            if (conn == null)
                return null;
            if (conn.State != System.Data.ConnectionState.Open)
                conn.Open();
            if (string.IsNullOrWhiteSpace(transactionName))
                return conn.BeginTransaction();
            else
                return conn.BeginTransaction(isolationLevel, transactionName);
        }
        /// <summary>
        /// 对连接执行Trans-SQL语句并返回受影响的行数
        /// </summary>
        /// <param name="conn">指定的数据库连接</param>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>受影响的行数</returns>
        public static int ExecuteNonQuery(
            SqlConnection conn,
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            int rslt = -1;
            using(SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sqlText;
                cmd.CommandType = cmdType;
                cmd.CommandTimeout = connectionTimeout;
                cmd.Parameters.Clear();
                if (parameters.Length > 0)
                    cmd.Parameters.AddRange(parameters);
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                rslt = cmd.ExecuteNonQuery(); 
            }
            return rslt;
        }
        /// <summary>
        /// 执行查询,并返回查询返回结果集中的第一行的第一列,并忽略其他行或行
        /// </summary>
        /// <param name="conn">指定的数据库连接</param>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>查询结果集中的第一行的第一列</returns>
        public static object ExcuteScalar(
            SqlConnection conn,
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            object rslt = null;
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sqlText;
                cmd.CommandType = cmdType;
                cmd.CommandTimeout = connectionTimeout;
                if (parameters.Length > 0)
                    cmd.Parameters.AddRange(parameters);
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                rslt = cmd.ExecuteScalar();
            }
            return rslt;
        }
        /// <summary>
        /// 执行查询,并将单一结果集存储在DataTable中并返回
        /// </summary>
        /// <param name="conn">指定的数据库连接</param>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>查询结果集</returns>
        public static DataTable ExecuteDataTable(
            SqlConnection conn,
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            DataTable rslt = null;
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sqlText;
                cmd.CommandType = cmdType;
                cmd.CommandTimeout = connectionTimeout;
                if (parameters.Length > 0)
                    cmd.Parameters.AddRange(parameters);
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using(SqlDataReader reader = cmd.ExecuteReader())
                {
                    rslt = new DataTable();
                    rslt.Load(reader);
                }
            }
            return rslt;
        }
        /// <summary>
        /// 执行查询,并将结果集填充到指定的表中
        /// </summary>
        /// <param name="conn">指定的数据库连接</param>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="datatable">要填充的表</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="loadOption">指示已存在于datatable的行如何与共享主键的传入行合并</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        public static void FillDataTable(
            SqlConnection conn,
            string sqlText,
            ref DataTable datatable,
            CommandType cmdType = CommandType.Text,
            LoadOption loadOption = LoadOption.PreserveChanges,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sqlText;
                cmd.CommandType = cmdType;
                cmd.CommandTimeout = connectionTimeout;
                if (parameters.Length > 0)
                    cmd.Parameters.AddRange(parameters);
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                    datatable.Load(reader, loadOption);
            }
        }
        /// <summary>
        /// 将指定表中的数据存储到数据库中
        /// </summary>
        /// <param name="conn">数据库连接</param>
        /// <param name="dataTable">等存储的数据</param>
        /// <param name="destinationTableName">存储的目标表</param>
        /// <param name="batchSize">每一批次的行数,在每一批次结束时,将该批次的行发送到服务器</param>
        /// <param name="ConnectionTimeout">超时之前操作完成所允许的秒数</param>
        /// <param name="rowState">只在匹配状态的行才会复制到目标表中</param>
        /// <param name="columnMapping">列映射关系</param>
        public static void SaveData(
            SqlConnection conn,
            ref DataTable dataTable,
            string destinationTableName = null,
            int batchSize = 500,
            int ConnectionTimeout = 30,
            DataRowState rowState = DataRowState.Added,
            params SqlBulkCopyColumnMapping[] columnMapping)
        {
            using(SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn))
            {
                sqlBulkCopy.BulkCopyTimeout = ConnectionTimeout;
                sqlBulkCopy.BatchSize = batchSize;
                if (string.IsNullOrWhiteSpace(destinationTableName))
                    sqlBulkCopy.DestinationTableName = dataTable.TableName;
                else
                    sqlBulkCopy.DestinationTableName = destinationTableName;
                foreach (SqlBulkCopyColumnMapping item in columnMapping)
                    sqlBulkCopy.ColumnMappings.Add(item);
                sqlBulkCopy.WriteToServer(dataTable,rowState);
            }
        }
        #endregion 表态成员方法
        #region 成员方法
        /// <summary>
        /// 获得数据库连接
        /// </summary>
        /// <returns>返回数据库连接</returns>
        public SqlConnection GetConnection()
        {
            return new SqlConnection(ConnectionString);
        }
        /// <summary>
        /// 对连接执行Trans-SQL语句并返回受影响的行数
        /// </summary>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = GetConnection())
                return ExecuteNonQuery(conn, sqlText, cmdType, connectionTimeout, parameters);
        }
        /// <summary>
        /// 执行查询,并返回查询返回结果集中的第一行的第一列,并忽略其他行或行
        /// </summary>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>查询结果集中的第一行的第一列</returns>
        public object ExcuteScalar(
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = GetConnection())
                return ExcuteScalar(conn, sqlText, cmdType, connectionTimeout, parameters);
        }
        /// <summary>
        /// 执行查询,并将单一结果集存储在DataTable中并返回
        /// </summary>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        /// <returns>查询结果集</returns>
        public DataTable ExecuteDataTable(
            string sqlText,
            CommandType cmdType = CommandType.Text,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = GetConnection())
                return ExecuteDataTable(conn, sqlText, cmdType, connectionTimeout, parameters);
        }
        /// <summary>
        /// 执行查询,并将结果集填充到指定的表中
        /// </summary>
        /// <param name="sqlText">执行的语句、存储过程或表名</param>
        /// <param name="datatable">要填充的表</param>
        /// <param name="cmdType">如何解释sqlText的属性</param>
        /// <param name="loadOption">指示已存在于datatable的行如何与共享主键的传入行合并</param>
        /// <param name="connectionTimeout">终止执行命令的尝试生成错误之前等待的时间</param>
        /// <param name="parameters">使用的参数集合</param>
        public void FillDataTable(
            string sqlText,
            ref DataTable datatable,
            CommandType cmdType = CommandType.Text,
            LoadOption loadOption = LoadOption.PreserveChanges,
            int connectionTimeout = 30,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = GetConnection())
                FillDataTable(conn, sqlText, ref datatable, cmdType, loadOption, connectionTimeout, parameters);
        }
        /// <summary>
        /// 将指定表中的数据存储到数据库中
        /// </summary>
        /// <param name="dataTable">等存储的数据</param>
        /// <param name="destinationTableName">存储的目标表</param>
        /// <param name="batchSize">每一批次的行数,在每一批次结束时,将该批次的行发送到服务器</param>
        /// <param name="ConnectionTimeout">超时之前操作完成所允许的秒数</param>
        /// <param name="rowState">只在匹配状态的行才会复制到目标表中</param>
        /// <param name="columnMapping">列映射关系</param>
        public void SaveData(
            ref DataTable dataTable,
            string destinationTableName = null,
            int batchSize = 500,
            int ConnectionTimeout = 30,
            DataRowState rowState = DataRowState.Added,
            params SqlBulkCopyColumnMapping[] columnMapping)
        {
            using (SqlConnection conn = GetConnection())
                SaveData(conn, ref dataTable,destinationTableName, batchSize, ConnectionTimeout, rowState, columnMapping);
        }
        #endregion 成员方法
    }
}

免责声明:文章转载自《DbHelper》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇按键消抖解决 plsql 启动报错 Initialization error下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Lucene中对document(记录)的CURD操作~为分布式全文检索设计

Lucene.net是.net环境中比较强的全文检索工具,它是从JAVA中转过来的,.net版本的lucene在功能上也豪不逊色于java版的lucene。今天主要来说一下lucene索引文件在更新时的一些方式。 一 整个索引文件 (cfs文件)覆盖更新;优点:简单,缺点:与服务器没有交互,但在生成索引文件时对IO影响比较大,前台lucene信息显示与数据...

ExtJs控件属性配置详细

Ext.form.TimeField: 配置项:maxValue:列表中允许的最大时间maxText:当时间大于最大值时的错误提示信息minValue:列表中允许的最小时间minText:当时间小于最小值时的错误提示信息increment:两个相邻选项间的时间间隔,默认为15分钟format:显示格式,默认为“g:i A”。一般使用“H:i:s”H:带前缀...

springboot整合amazonS3,封装上传文件接口

1.在pom.xml中引入amazonS3的依赖。 <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId>...

&amp;lt;转&amp;gt;PHP中正则表达式函数

PHP中的正则表达式函数       在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的,基于传统型NFA。PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation Sy...

【学习】java下实现调用oracle的存储过程和函数

在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES View Code--创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRIMARYKEY, PRICE NUMBER(7,2), UPDATED DATE ); 2.插入测试数据: View...

【转帖】C# DllImport 系统调用使用详解 托管代码的介绍 EntryPoint的使用

1 DLLImport的使用 using System; using System.Runtime.InteropServices; //命名空间 class Example { //用DllImport 导入Win32的MessageBox函数 [DllImport("user32.dll", CharSet = CharSet.Unicode)] p...