using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Configuration;
namespace BeginScreen
{
    public static class DBHelper
    {
        private static readonly string _ConnectionString = ConfigurationManager.ConnectionStrings["MindraySqlString"].ToString();
        //App.config中如果加密,应先解密再使用
        //此处添加解密代码
        private static SqlConnection mConnection;
        /// 
        /// 得到一个已经Open的Connection连接对象
        /// 
        public static SqlConnection Connection
        {
            get
            {
                if (mConnection == null)
                {
                    mConnection = new SqlConnection(_ConnectionString);
                }
                if (mConnection.State == ConnectionState.Closed)
                {
                    mConnection.Open();
                }
                else if (mConnection.State == ConnectionState.Broken)
                {
                    mConnection.Close();
                    mConnection.Open();
                }
                return mConnection;
            }
        }
        /// 
        /// 执行sql操作(增、删、改)
        /// 
        /// sql语句
        /// 执行的记录数
        public static int ExecNonQuery(string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, Connection);
            return cmd.ExecuteNonQuery();
        }
        /// 
        /// 执行sql操作(增、删、改),以参数方式传值
        /// 
        /// sql语句
        /// 参数数组
        /// 执行的记录数
        public static int ExecNonQuery(string sql, params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand(sql, Connection);
            cmd.Parameters.AddRange(values);
            return cmd.ExecuteNonQuery();
        }
        /// 
        /// 执行sql查询,得到单个值
        /// 
        /// 得到单个值的sql查询语句
        /// 单个值对象
        public static object ExecuteScalar(string safeSql)
        {
            SqlCommand cmd = new SqlCommand(safeSql, Connection);
            return cmd.ExecuteScalar();
        }
        /// 
        /// 执行sql查询,得到单个值,以参数方式传值
        /// 
        /// 得到单个值的sql查询语句
        /// 参数数组
        /// 单个值对象
        public static object ExecuteScalar(string safeSql, params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand(safeSql, Connection);
            cmd.Parameters.AddRange(values);
            return cmd.ExecuteScalar();
        }
        /// 
        /// 执行sql查询,得到一个DataReader对象
        /// 
        /// sql查询语句
        /// DataReader对象
        public static SqlDataReader GetDataReader(string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, Connection);
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return reader;
        }
        /// 
        ///  执行sql查询,得到一个DataReader对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataReader对象
        public static SqlDataReader GetDataReader(string sql, params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand(sql, Connection);
            cmd.Parameters.AddRange(values);
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return reader;
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象
        /// 
        /// sql查询语句
        /// DataTable
        public static DataTable GetDataTable(string sql)
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, Connection);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds.Tables[0];
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataTable
        public static DataTable GetDataTable(string sql, params SqlParameter[] values)
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, Connection);
            da.SelectCommand.Parameters.AddRange(values);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds.Tables[0];
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象
        /// 
        /// sql查询语句
        /// DataSet
        public static DataSet GetDataSet(string sql)
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, Connection);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataSet
        public static DataSet GetDataSet(string sql, params SqlParameter[] values)
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, Connection);
            da.SelectCommand.Parameters.AddRange(values);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
        /// 
        /// 事务
        /// 
        /// 
        /// 
        public static bool ExecuteTrasaction(string sqlStr)
        {
            bool result = true;
            SqlTransaction tran = null;
            try
            {
                tran = Connection.BeginTransaction("Tran");
                SqlCommand cmd = new SqlCommand(sqlStr, Connection, tran);
                cmd.ExecuteNonQuery();
                tran.Commit();
                result = true;
            }
            catch
            {
                tran.Rollback();
                result = false;
            }
            return result;
        }
        /// 
        /// 事务
        /// 
        /// 
        /// 
        public static bool ExecuteTrasaction(List sqlStr)
        {
            bool result = true;
            SqlTransaction tran = null;
            try
            {
                tran = Connection.BeginTransaction("Tran");
                for (int i = 0; i < sqlStr.Count; i++)
                {
                    SqlCommand cmd = new SqlCommand(sqlStr[i], Connection, tran);
                    cmd.ExecuteNonQuery();
                }
                tran.Commit();
                result = true;
            }
            catch
            {
                tran.Rollback();
                result = false;
            }
            return result;
        }
        /// 
        /// 拆箱获得int
        /// 
        /// 
        /// 
        public static int GetInt(object obj)
        {
            return (int)obj;
        }
        /// 
        /// 拆箱获得float
        /// 
        /// 
        /// 
        public static float GetFloat(object obj)
        {
            return (float)obj;
        }
        /// 
        /// 拆箱获得double
        /// 
        /// 
        /// 
        public static double GetDouble(object obj)
        {
            return (double)obj;
        }
        /// 
        /// 拆箱获得long
        /// 
        /// 
        /// 
        public static long GetLong(object obj)
        {
            return (long)obj;
        }
        /// 
        /// 拆箱获得decimal
        /// 
        /// 
        /// 
        public static decimal GetDecimal(object obj)
        {
            return (decimal)obj;
        }
        /// 
        /// 拆箱获得bool
        /// 
        /// 
        /// 
        public static bool GetBoolean(object obj)
        {
            return (bool)obj;
        }
        /// 
        /// 拆箱获得DateTime
        /// 
        /// 
        /// 
        public static DateTime GetDateTime(object obj)
        {
            return (DateTime)obj;
        }
        /// 
        /// 拆箱获得string
        /// 
        /// 
        /// 
        public static string GetString(object obj)
        {
            return obj + "";
        }
        public static DateTime SystemDate()
        {
            string sqlStr = "select getdate() as SysDate";
            DataTable dt = GetDataTable(sqlStr);
            return DateTime.Parse(DateTime.Parse(dt.Rows[0]["SysDate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
        }
    }
}