using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
namespace AutoUpdateTool
{
    public static class DBHelper
    {
        private static readonly string _ConnectionString = new  XmlOperator(Application.StartupPath + "\\AIMS.xml").GetNode("ConnectionString")[0].ToString();
        /// 
        /// 执行sql操作(增、删、改)
        /// 
        /// sql语句
        /// 执行的记录数
        public static int ExecNonQuery(string sql)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = sql;
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// 
        /// 执行sql操作(增、删、改),以参数方式传值
        /// 
        /// sql语句
        /// 参数数组
        /// 执行的记录数
        public static int ExecNonQuery(string sql, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(values);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// 
        /// 执行sql查询,得到单个值
        /// 
        /// 得到单个值的sql查询语句
        /// 单个值对象
        public static object ExecuteScalar(string safeSql)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = safeSql;
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// 
        /// 执行sql查询,得到单个值,以参数方式传值
        /// 
        /// 得到单个值的sql查询语句
        /// 参数数组
        /// 单个值对象
        public static object ExecuteScalar(string safeSql, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = safeSql;
                    cmd.Parameters.AddRange(values);
                    return cmd.ExecuteScalar();
                }
            }
        }
        ///// 
        ///// 执行sql查询,得到一个DataReader对象
        ///// 
        ///// sql查询语句
        ///// DataReader对象
        //public static SqlDataReader GetDataReader(string sql)
        //{
        //    using (SqlConnection conn = new SqlConnection(_ConnectionString))
        //    {
        //        if (conn.State != ConnectionState.Open)
        //            conn.Open();
        //        SqlCommand cmd = new SqlCommand(sql, conn);
        //        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
        //        return reader;
        //    }
        //}
        /// 
        ///  执行sql查询,得到一个DataReader对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataReader对象
        public static SqlDataReader GetDataReader(string sql, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddRange(values);
                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return reader;
            }
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象
        /// 
        /// sql查询语句
        /// DataTable
        public static DataTable GetDataTable(string sql)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds.Tables[0];
            }
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataTable
        public static DataTable GetDataTable(string sql, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                SqlCommand cmd = new SqlCommand(sql, conn);
                if (values != null)
                    cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds.Tables[0];
            }
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象
        /// 
        /// sql查询语句
        /// DataSet
        public static DataSet GetDataSet(string sql)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds;
            }
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataSet
        public static DataSet GetDataSet(string sql, params SqlParameter[] values)
        {
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                SqlCommand cmd = new SqlCommand(sql, conn);
                if (values != null)
                    cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds;
            }
        }
        /// 
        /// 事务
        /// 
        /// 
        /// 
        public static bool ExecuteTrasaction(string sqlStr)
        {
            bool result = true;
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                SqlTransaction tran = null;
                try
                {
                    tran = conn.BeginTransaction("Tran");
                    SqlCommand cmd = new SqlCommand(sqlStr, conn, tran);
                    cmd.ExecuteNonQuery();
                    tran.Commit();
                    result = true;
                }
                catch
                {
                    tran.Rollback();
                    result = false;
                }
            }
            return result;
        }
        /// 
        /// 事务
        /// 
        /// 
        /// 
        public static bool ExecuteTrasaction(List sqlStr)
        {
            bool result = true;
            using (SqlConnection conn = new SqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                SqlTransaction tran = null;
                try
                {
                    tran = conn.BeginTransaction("Tran");
                    for (int i = 0; i < sqlStr.Count; i++)
                    {
                        SqlCommand cmd = new SqlCommand(sqlStr[i], conn, 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 SqlDataReader GetReader(string sql, params SqlParameter[] values)
        {
            SqlConnection connection = new SqlConnection(_ConnectionString);
            connection.Open();
            SqlCommand cmd = new SqlCommand(sql, connection);
            cmd.Parameters.AddRange(values);
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return reader;
        }
         
    }
}