using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Windows.Forms;
using Npgsql;
using HelperDB;
namespace AIMSExtension
{
    public static class PGDBHelper
    {
        public static readonly string _ConnectionString = new XmlUse(Application.StartupPath + "\\AIMS.xml").GetNode("HisConnectionStringOracel")[0].ToString(); 
        /// 
        /// 执行sql操作(增、删、改)
        /// 
        /// sql语句
        /// 执行的记录数
        public static int ExecNonQuery(string sql)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (NpgsqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = sql;
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// 
        /// 执行sql操作(增、删、改),以参数方式传值
        /// 
        /// sql语句
        /// 参数数组
        /// 执行的记录数
        public static int ExecNonQuery(string sql, params SqlParameter[] values)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (NpgsqlCommand 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 (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (NpgsqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = safeSql;
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// 
        /// 执行sql查询,得到单个值,以参数方式传值
        /// 
        /// 得到单个值的sql查询语句
        /// 参数数组
        /// 单个值对象
        public static object ExecuteScalar(string safeSql, params SqlParameter[] values)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (NpgsqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = safeSql;
                    cmd.Parameters.AddRange(values);
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// 
        ///  执行sql查询,得到一个DataReader对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataReader对象
        public static NpgsqlDataReader GetDataReader(string sql, params SqlParameter[] values)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
                cmd.Parameters.AddRange(values);
                NpgsqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return reader;
            }
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象
        /// 
        /// sql查询语句
        /// DataTable
        public static DataTable GetDataTable(string sql)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
                da.Fill(ds);
                return ds.Tables[0];
            }
        }
        /// 
        /// 执行sql查询,得到一个DataTable对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataTable
        public static DataTable GetDataTable(string sql, params SqlParameter[] values)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
                if (values != null)
                    cmd.Parameters.AddRange(values);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds.Tables[0];
            }
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象
        /// 
        /// sql查询语句
        /// DataSet
        public static DataSet GetDataSet(string sql)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds;
            }
        }
        /// 
        /// 执行sql查询,得到一个DataSet对象,以参数方式传值
        /// 
        /// sql查询语句
        /// 参数数组
        /// DataSet
        public static DataSet GetDataSet(string sql, params SqlParameter[] values)
        {
            using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                DataSet ds = new DataSet();
                NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
                if (values != null)
                    cmd.Parameters.AddRange(values);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
                try
                {
                    da.Fill(ds);
                }
                catch (Exception)
                {
                }
                return ds;
            }
        }
        /// 
        /// 拆箱获得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"));
        }
    }
}