数据库访问

public static class SqlHelper
    {

        #region 获取连接字符串属性
        private static string _connectionStringInner = string.Empty;
        public static string APPStartupPath = string.Empty;

        public static string ConnectionString
        {
            get
            {
                if (_connectionStringInner == string.Empty)
                {
                    try
                    {
                        SqlConnInfo sqlConnInfo = new SqlConnInfo();
                        string strConn = GetConnectionString(sqlConnInfo);
                        if (strConn == "")
                            throw new Exception("Not configured database connection string");
                        _connectionStringInner = strConn;
                    }
                    catch (Exception)
                    {
                        throw new Exception("Not configured database connection string");
                    }
                }
                return _connectionStringInner;
            }
            set
            {
                _connectionStringInner = value;
            }
        }


        public static void MainDBLost()
        {
            _connectionStringInner = ConfigurationManager.ConnectionStrings["StrConn3"].ToString();
            string table = ConfigurationManager.ConnectionStrings["db"].ToString();
            string cmd = "ALTER DATABASE " + table + " SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS";
            ExecuteSql(cmd);
            _connectionStringInner = ConfigurationManager.ConnectionStrings["StrConn2"].ToString();
        }

        public static void MainDBRestore() 
        {
            _connectionStringInner = ConfigurationManager.ConnectionStrings["StrConn3"].ToString();
            string table = ConfigurationManager.ConnectionStrings["db"].ToString();
            string cmd  = "ALTER DATABASE " + table + " SET PARTNER RESUME";
            string cmd2 = "ALTER DATABASE " + table + " SET PARTNER FAILOVER";
           
             ExecuteSql(cmd);
             ExecuteSql(cmd2);
            _connectionStringInner = ConfigurationManager.ConnectionStrings["StrConn"].ToString();
        }

        public static bool CheckDBState() 
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    using (SqlCommand cmd = new SqlCommand("select getdate()"))
                    {
                        cmd.Connection = connection;
                        connection.Open();
                        cmd.ExecuteNonQuery();
                        connection.Close();
                        return true;
                    }
                }
            }
            catch
            {
                return false;
            }
        }

        #endregion


       

        public static bool ExecuteSql(string sqlString, params SqlParameter[] cmdParms)
        {
            if (!DbMonitor.IsOk)
                return false;
            try
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        PrepareCommand(cmd, connection, null, CommandType.Text, sqlString, cmdParms);
                        int res = cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                        return res > 0;
                    }
                }
            }
            catch
            {
                return false;
            }
        }
      
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {
            if (!DbMonitor.IsOk)
                return ;

            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
            {
                foreach (SqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }

        private static DataTable ExecuteSearch(SqlCommand comm, params SqlParameter[] p)
        {
            DataTable dt = new DataTable();
            if (!DbMonitor.IsOk)
                return dt;
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                if (p != null && p.Length > 0)
                {
                    foreach (SqlParameter parameter in p)
                    {
                        if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                            (parameter.Value == null))
                        {
                            parameter.Value = DBNull.Value;
                        }
                        comm.Parameters.Add(parameter);
                    }
                }
                comm.Connection = conn;
                using (SqlDataAdapter da = new SqlDataAdapter(comm))
                {
                   da.Fill(dt);
                }
                comm.Parameters.Clear();
                comm.Dispose();
            }
            return dt;
        }

        public static DataTable ExecuteSearch(SqlCommand comm)
        {
            if (!DbMonitor.IsOk)
                return null;

            DataTable result = new DataTable();
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                comm.Connection = conn;
                SqlDataAdapter da = new SqlDataAdapter(comm);
                da.Fill(result);
            }
            return result;
        }

        public static object ExecuteScalar(string sql, params SqlParameter[] p)
        {
            if (!DbMonitor.IsOk)
                return null;
            object obj = null;
      
            SqlCommand comm = new SqlCommand();
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                if (p != null && p.Length > 0)
                {
                    foreach (SqlParameter item in p)
                        comm.Parameters.Add(item);
                }
                comm.Connection = conn;
                conn.Open();
                comm.CommandText = sql;
                obj = comm.ExecuteScalar();
                conn.Close();
            }
            return obj;
        }

        public static bool AddTransForList(List<string> sql, List<SqlParameter[]> para)
        {
            if (!DbMonitor.IsOk)
                return false;

            bool result = false;
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlTransaction transaction = null;
                try
                {
                    conn.Open();
                    transaction = conn.BeginTransaction();
                    int totalCount = 0;
                    if (sql != null && sql.Count > 0)
                    {
                        int userId = -1;
                        using (SqlCommand comm = new SqlCommand(sql[0]))
                        {
                            comm.Connection = conn;
                            comm.Transaction = transaction;
                            comm.Parameters.Clear();
                            if (para != null && para.Count > 0)
                            {
                                foreach (SqlParameter parameter in para[0])
                                {
                                    if ((parameter.Direction == ParameterDirection.InputOutput ||
                                         parameter.Direction == ParameterDirection.Input) &&
                                        (parameter.Value == null))
                                    {
                                        parameter.Value = DBNull.Value;
                                    }
                                    comm.Parameters.Add(parameter);
                                }
                            }
                            totalCount += comm.ExecuteNonQuery();
                            string tempSql = "select @@identity";
                            comm.CommandText = tempSql;
                            userId = Convert.ToInt32(comm.ExecuteScalar());
                        }
                        if (userId != -1)
                        {
                            for (int i = 1; i < sql.Count; i++)
                            {
                                if (!string.IsNullOrEmpty(sql[i]))
                                {
                                    SqlCommand comm = new SqlCommand(sql[i]);
                                    comm.Connection = conn;
                                    comm.Transaction = transaction;
                                    comm.Parameters.Clear();
                                    if (para != null && para[i] != null)
                                    {
                                        foreach (SqlParameter sqlParameterse in para[i])
                                        {
                                            if ((sqlParameterse.Direction == ParameterDirection.InputOutput ||
                                                     sqlParameterse.Direction == ParameterDirection.Input) &&
                                                    (sqlParameterse.Value == null))
                                            {
                                                sqlParameterse.Value = DBNull.Value;
                                            }
                                            comm.Parameters.Add(sqlParameterse);
                                        }
                                    }
                                    comm.Parameters.Add(new SqlParameter("@TempID", userId));
                                    totalCount += comm.ExecuteNonQuery();
                                }
                            }
                        }
                    }
                    transaction.Commit();
                    result = true;
                }
                catch (Exception e)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                    throw e;
                }
                finally
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                }
            }
            return result;
        }

        public static bool ExecuteTrans(List<string> sqlList, List<SqlParameter[]> paraList)
        {
            if (!DbMonitor.IsOk)
                return false;

            bool isSucc = false;
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand()) 
                {
                    SqlTransaction transaction = null;
                    cmd.Connection = conn;
                    try
                    {
                        conn.Open();
                        transaction = conn.BeginTransaction();
                        cmd.Transaction = transaction;

                        for (int i = 0; i < sqlList.Count; i++)
                        {
                            cmd.CommandText = sqlList[i];
                            if (paraList != null && paraList[i] != null)
                            {
                                cmd.Parameters.Clear();
                                cmd.Parameters.AddRange(paraList[i]);
                            }
                            cmd.ExecuteNonQuery();
                        }
                        transaction.Commit();
                        isSucc = true;

                    }
                    catch (Exception e)
                    {
                        try { transaction.Rollback(); }
                        catch { }
                        throw e;
                    }
                }
            }
            return isSucc;

        }

        public static DataTable ExecuteStoredProcedure(string storedProcedureName, params SqlParameter[] p)
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = storedProcedureName;
            comm.CommandType = CommandType.StoredProcedure;
            return ExecuteSearch(comm, p);
        }

        public static DataTable ExecuteSqlToTable(string sql, params SqlParameter[] p)
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = sql;
            return ExecuteSearch(comm, p);
        }

        public static DataTable ExecuteSqlToTable(string sql)
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = sql; //SQL语句
            return ExecuteSearch(comm, null);
        }

        public static DataTable CreateSqlByPageExcuteSql(string Sql, int PageIndex, int PageSize, string OrderBy, SqlParameter[] Paras, ref int TotalCount)
        {
            StringBuilder sbSql = new StringBuilder();
            if (PageIndex == 1)
                sbSql.Append("SELECT TOP " + PageSize + " *  FROM");
            else
                sbSql.Append("SELECT * FROM ");
            sbSql.Append(" ( SELECT ROW_NUMBER() OVER (ORDER BY " + OrderBy + ") as RowNumber,tempTable.*");
            sbSql.Append(" FROM ( " + Sql + " ) AS  tempTable ) AS tmp ");

            if (PageIndex != 1)
                sbSql.Append("WHERE RowNumber BETWEEN CONVERT(varchar,(@PageIndex-1)*@PageSize+1) AND CONVERT(varchar,(@PageIndex-1)*@PageSize+@PageSize) ");

            sbSql.Append(" SELECT @TotalRecord=count(*) from (" + Sql + ") tempTable");

            /*重新构造SqlParameter*/
            int index = 0;
            int Length = 0;
            SqlParameter[] SqlParas;

            if (Paras != null && Paras.Length > 0)
            {
                Length = Paras.Length;
                SqlParas = new SqlParameter[Length + 3];
                for (int i = 0; i < Paras.Length; i++)
                {
                    SqlParas[i] = Paras[i];
                    index++;
                }
            }
            else
                SqlParas = new SqlParameter[Length + 3];



            /*将分页参数追加至SqlParameter*/
            SqlParas[index] = new SqlParameter("@PageIndex", SqlDbType.Int);
            SqlParas[index].Value = PageIndex;
            index++;
            SqlParas[index] = new SqlParameter("@PageSize", SqlDbType.Int);
            SqlParas[index].Value = PageSize;
            index++;
            SqlParas[index] = new SqlParameter("@TotalRecord", SqlDbType.Int);
            SqlParas[index].Direction = ParameterDirection.Output;
            DataTable dtTemp = ExecuteSqlToTable(sbSql.ToString(), SqlParas);
            TotalCount = (int)SqlParas[index].Value;
            return dtTemp;
        }

        public static DataTable CreateSqlByPageExcuteSqlArr(string Sql, int PageIndex, int PageSize, string OrderBy, ArrayList paramList, ref int TotalCount)
        {
            StringBuilder sbSql = new StringBuilder();
            if (PageIndex == 1)
                sbSql.Append("SELECT TOP " + PageSize + " *  FROM");
            else
                sbSql.Append("SELECT * FROM ");
            sbSql.Append(" ( SELECT ROW_NUMBER() OVER (ORDER BY " + OrderBy + ") as RowNumber,tempTable.*");
            sbSql.Append(" FROM ( " + Sql + " ) AS  tempTable ) AS tmp ");

            if (PageIndex != 1)
                sbSql.Append("WHERE RowNumber BETWEEN CONVERT(varchar,(@PageIndex-1)*@PageSize+1) AND CONVERT(varchar,(@PageIndex-1)*@PageSize+@PageSize) ");

            sbSql.Append(" SELECT @TotalRecord=count(*) from (" + Sql + ") tempTable");

            /*重新构造SqlParameter*/
            int index = 0;
            int Length = 0;
            SqlParameter[] SqlParas;


            if (paramList != null && paramList.Count > 0)
            {
                SqlParas = new SqlParameter[paramList.Count + 3];
                for (int i = 0; i < paramList.Count; i++)
                {
                    SqlParas[i] = (SqlParameter)paramList[i];
                    index++;
                }
            }


            else
                SqlParas = new SqlParameter[Length + 3];



            /*将分页参数追加至SqlParameter*/
            SqlParas[index] = new SqlParameter("@PageIndex", SqlDbType.Int);
            SqlParas[index].Value = PageIndex;
            index++;
            SqlParas[index] = new SqlParameter("@PageSize", SqlDbType.Int);
            SqlParas[index].Value = PageSize;
            index++;
            SqlParas[index] = new SqlParameter("@TotalRecord", SqlDbType.Int);
            SqlParas[index].Direction = ParameterDirection.Output;
            DataTable dtTemp = ExecuteSqlToTable(sbSql.ToString(), SqlParas);
            TotalCount = (int)SqlParas[index].Value;
            return dtTemp;
        }

        public static DataTable PagerWithCommand(SqlCommand cmd, int PageIndex, int PageSize, string OrderBy, ref int TotalCount)
        {
            //变量定义
            StringBuilder sbSql = new StringBuilder();
            //第一页时
            if (PageIndex == 1)
                sbSql.Append("SELECT TOP " + PageSize + " *  FROM");
            else
                sbSql.Append("SELECT * FROM ");
            sbSql.Append(" ( SELECT ROW_NUMBER() OVER (ORDER BY " + OrderBy + ") as RowNumber,tempTable.*");
            sbSql.Append(" FROM ( " + cmd.CommandText + " ) AS  tempTable ) AS tmp ");

            if (PageIndex != 1)
                sbSql.Append("WHERE RowNumber BETWEEN CONVERT(varchar,(@PageIndex-1)*@PageSize+1) AND CONVERT(varchar,(@PageIndex-1)*@PageSize+@PageSize) ");

            sbSql.Append("; SELECT @TotalRecord = count(*) FROM (" + cmd.CommandText + ") tempTable");

            //重新设置命令SQL语句
            cmd.CommandText = sbSql.ToString();

            /* 将分页参数追加至SqlParameter */

            //当前页
            SqlParameter param = new SqlParameter("@PageIndex", SqlDbType.Int);
            param.Value = PageIndex;
            cmd.Parameters.Add(param);
            //每页显示数
            param = new SqlParameter("@PageSize", SqlDbType.Int);
            param.Value = PageSize;
            cmd.Parameters.Add(param);
            //总数
            param = new SqlParameter("@TotalRecord", SqlDbType.Int);
            param.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(param);

            DataTable dtTemp = ExecuteSearch(cmd);

            TotalCount = (int)cmd.Parameters["@TotalRecord"].Value;

            return dtTemp;
        }
 
    
        //private static string GetConnectionString()
        //{
        //    Assembly ass;
        //    Type type;
        //    string strConn = "";
        //    try
        //    {
        //        //路径
        //        //string filePath_old = System.Environment.CurrentDirectory + @"\数据库配置.exe";
        //        string filePath = APPStartupPath + @"\数据库配置.exe";
        //        //Debug.WriteLine(string.Format("原先获取的当前工作目录的完全限定路径:{0}", filePath_old));
        //        //Debug.WriteLine(string.Format("修改后的启动应用程序的可执行文件路径:{0}", filePath));
        //        ass = Assembly.LoadFrom(filePath);
        //        type = ass.GetType("TH_SqlConnectionConfig.SqlConnectionInfo");
        //        MethodInfo Method = type.GetMethod("GetConnectionString");
        //        strConn = Convert.ToString(Method.Invoke(Activator.CreateInstance(type), new Object[] { }));
        //    }
        //    catch (Exception)
        //    {
        //        return "";
        //    }
        //    return strConn;
        //}

        /// <summary>
        /// 读取配置
        /// </summary>
        public static bool ReadConfig(SqlConnInfo scInfo)
        {
            if (!File.Exists(scInfo.ConfigPath))
                return false;
            try
            {
                XDocument xd = XDocument.Load(scInfo.ConfigPath);
                XElement root = xd.Element("Root");
                XElement xe = root.Element("SqlConfig");
                scInfo.MainDbIp = xe.Attribute("MainDbIp").Value;
                scInfo.MirrorDbIp = xe.Attribute("MirrorDbIp").Value;
                scInfo.DbName = xe.Attribute("DbName").Value;
                scInfo.UserName = xe.Attribute("UserName").Value;
                scInfo.Pwd = Security.Base64Decrypt(xe.Attribute("Pwd").Value);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 获取连接字符串
        /// </summary>
        /// <returns></returns>
        public static string GetConnectionString(SqlConnInfo scInfo, bool readXml = true)
        {
            string strConn = "";
            if (readXml && !ReadConfig(scInfo))
                return strConn;
            strConn = string.Format("Data Source={0};Failover Partner ={1};Initial Catalog={2};User ID={3};Password={4};Connect Timeout=10",
                scInfo.MainDbIp, scInfo.MirrorDbIp, scInfo.DbName, scInfo.UserName, scInfo.Pwd);
            return strConn;
        }
    }


strConn = string.Format("Data Source={0};Failover Partner ={1};Initial Catalog={2};User ID={3};Password={4};Connect Timeout=10"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值