zoukankan      html  css  js  c++  java
  • SqlHelp

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Data;
    using System.Text;
    using System.Configuration;
    using System.Linq;
    
    namespace Common
    {
        public class SqlHelp
        {
            public delegate T BuildObjectHandler<T>(IDataReader reader);
            public delegate Object BuildObjectHandler1(IDataReader reader);
            private static readonly string ConnStr = ConfigurationManager.AppSettings["ConnectionString"];
    
    
            private static object syncLock = new object();
            private static SqlHelp _instance;
    
            public static SqlHelp Instance()
            {
                if (_instance == null)
                {
                    lock (syncLock)
                    {
                        if (_instance == null)
                        {
                            _instance = new SqlHelp();
                        }
                    }
                }
                return _instance;
            }
            public int ExecuteNonQuery(string commandText)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = new SqlCommand(commandText);
                    command.Connection = conn;
                    return command.ExecuteNonQuery();
                }
            }
    
            public object ExecuteFrist(string commandText)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = new SqlCommand(commandText);
                    command.Connection = conn;
                    return command.ExecuteScalar();
                }
            }
            public object ExecuteFrist(string commandText, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = GetStoredCommand(commandText, parameterValues);
                    command.Connection = conn;
                    return command.ExecuteScalar();
                }
            }
            public object ExecuteFrist(string commandText, string ExecuteNonQuery, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = new SqlCommand(commandText, conn);
    
                    if (ps != null)
                    {
                        command.Parameters.Clear();
                        foreach (IDbDataParameter p in ps)
                        {
                            command.Parameters.Add(p);
                        }
                    }
                    return Convert.ToInt32(command.ExecuteScalar());
                }
            }
    
            public int ExecuteNonQuery(string commandText, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    int iRows;
                    SqlCommand command = new SqlCommand(commandText, conn);
    
                    if (ps != null)
                    {
                        command.Parameters.Clear();
                        foreach (IDbDataParameter p in ps)
                        {
                            command.Parameters.Add(p);
                        }
                    }
                    iRows = command.ExecuteNonQuery();
                    return iRows;
                }
            }
    
            public int ExecuteQuery(string commandText, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = new SqlCommand(commandText, conn);
    
                    if (ps != null)
                    {
                        command.Parameters.Clear();
                        foreach (IDbDataParameter p in ps)
                        {
                            command.Parameters.Add(p);
                        }
                    }
                    return Convert.ToInt32(command.ExecuteScalar());
                }
            }
    
            public int ExecuteInsert(string commandText, params SqlParameter[] ps)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = new SqlCommand(commandText, conn);
    
                    if (ps != null)
                    {
                        command.Parameters.Clear();
                        foreach (IDbDataParameter p in ps)
                        {
                            command.Parameters.Add(p);
                        }
                    }
                    return Convert.ToInt32(command.ExecuteNonQuery());
                }
            }
    
            public DataTable ExecuteDataTable(string commandText)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    try
                    {
                        conn.Open();
                        SqlCommand command = new SqlCommand(commandText);
                        command.Connection = conn;
                        using (IDataReader dr = command.ExecuteReader())
                        {
                            DataTable dt = new DataTable("row");
                            dt.Load(dr);
                            conn.Close();
                            return dt;
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        conn.Close();
                    }
    
                }
            }
    
            public IDataReader ExecuteProduceReader(string storedProcedureName, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = GetStoredCommand(storedProcedureName, parameterValues);
                    command.Connection = conn;
                    return command.ExecuteReader();
                }
            }
    
            public int ExecuteProduce(string produceName, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    SqlCommand command = GetStoredCommand(produceName, parameterValues);
                    command.Connection = conn;
                    return command.ExecuteNonQuery();
                }
            }
    
            public string ExecuteProduceReturn(string produceName, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
    
                    SqlCommand command = GetStoredCommand(produceName, parameterValues);
                    command.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                    command.Connection = conn;
                    command.ExecuteNonQuery();
                    return command.Parameters["@return"].Value.ToString();
                }
            }
    
            public int ExecuteProduceReturnInt(string produceName, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
    
                    SqlCommand command = GetStoredCommand(produceName, parameterValues);
                    command.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
                    command.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                    command.Connection = conn;
                    command.ExecuteNonQuery();
                    return int.Parse(command.Parameters["@return"].Value.ToString());
                }
            }
    
    
            public DataTable GetProduceDataTable(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                   
                    conn.Open();
                    SqlDataReader reader;
                    DataTable dt = new DataTable();
                    try
                    {
                        SqlCommand cmd = new SqlCommand();
                        SetCommand(cmd, cmdText, cmdType,conn, cmdParms);
                        reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        dt.Load(reader);
                        reader.Close();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message.ToString());
                    }
                    return dt;
                }
            }
    
            public DataTable GetProduceDataTableAndOutput(string cmdText, CommandType cmdType, SqlParameter[] cmdParms,out string output)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
    
                    conn.Open();
                    SqlDataReader reader;
                    DataTable dt = new DataTable();
                    try
                    {
                        SqlCommand cmd = new SqlCommand();
                        SetCommand(cmd, cmdText, cmdType, conn, cmdParms);
                        cmd.Parameters.Add(new SqlParameter("@outPut", SqlDbType.VarChar, 60));
                        cmd.Parameters["@outPut"].Direction = ParameterDirection.Output;
                        reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        dt.Load(reader);
                        output=cmd.Parameters["@outPut"].Value.ToString();
                        reader.Close();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message.ToString());
                    }
                    return dt;
                }
            }
            public string ExecuteProduceOutPut(string produceName, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
    
                    SqlCommand command = GetStoredCommand(produceName, parameterValues);
                    command.Parameters.Add(new SqlParameter("@outPut", SqlDbType.VarChar, 60));
                    command.Parameters["@outPut"].Direction = ParameterDirection.Output;
    
                    command.Connection = conn;
                    command.ExecuteNonQuery();
                    return command.Parameters["@outPut"].Value.ToString();
                }
            }
    
    
            public int ExecuteProduceReturnOutPut(string produceName, out string outStr, params object[] parameterValues)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
    
                    SqlCommand command = GetStoredCommand(produceName, parameterValues);
                    command.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
                    command.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                    command.Parameters.Add(new SqlParameter("@outPut", SqlDbType.VarChar, 8000));
                    command.Parameters["@outPut"].Direction = ParameterDirection.Output;
    
                    command.Connection = conn;
                    command.ExecuteNonQuery();
                    outStr = command.Parameters["@outPut"].Value.ToString();
                    string ret = command.Parameters["@return"].Value.ToString();
                    return int.Parse(ret);
                }
            }
    
            /// <summary>
            /// 获取存储过程命令
            /// </summary>
            /// <param name="storedProcedureName"></param>
            /// <param name="parameterValues"></param>
            /// <returns></returns>
            public SqlCommand GetStoredCommand(string storedProcedureName, params object[] parameterValues)
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = storedProcedureName;
                cmd.Parameters.Clear();
                if (parameterValues != null && parameterValues.Length > 0)
                {
                    for (int i = 0; i < parameterValues.Length; i++)
                    {
                        cmd.Parameters.Add(parameterValues[i]);
                    }
                }
                return cmd;
            }
     
            public IList<T> ExecuteQueryToList<T>(string sqlStr, BuildObjectHandler<T> buildObj)
            {
                IList<T> sets = new List<T>();
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = new SqlCommand(sqlStr, conn);
    
                    try
                    {
                        conn.Open();
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                sets.Add(buildObj(dr));
                            }
                            dr.Close();
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                }
                return sets;
            }
    
            /// <summary>
            /// 存储过程返回list集合
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="sqlStr"></param>
            /// <param name="buildObj"></param>
            /// <returns></returns>
            public IList<T> ExecuteQueryToListByProcedure<T>(string storedProcedureName, BuildObjectHandler<T> buildObj, params object[] parameterValues)
            {
                IList<T> sets = new List<T>();
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = GetStoredCommand(storedProcedureName, parameterValues);
                    cmd.CommandTimeout = 180;
                    cmd.Connection = conn;
                    try
                    {
                        conn.Open();
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                sets.Add(buildObj(dr));
                            }
                            dr.Close();
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                }
                return sets;
            }
    
    
            public T ExecuteQueryToFirst<T>(string sqlStr, BuildObjectHandler<T> buildObj)
            {
                IList<T> sets = new List<T>();
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = new SqlCommand(sqlStr, conn);
    
                    try
                    {
                        conn.Open();
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                
                                sets.Add(buildObj(dr));
                                break;
                            }
                            dr.Close();
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                }
                return sets.First();
            }
    
    
            public Object ExecuteQueryToFirstAndReturn(string proName, out int returnVal, BuildObjectHandler1 buildObj, params object[] parameterValues)
            {
                IList<Object> sets = new List<Object>();
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = GetStoredCommand(proName, parameterValues);
                    cmd.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
                    cmd.Connection = conn;
                    conn.Open();
                    //cmd.ExecuteNonQuery();
                    //returnVal = 0;
                    try
                    {
    
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                sets.Add(buildObj(dr));
    
                                break;
                            }
    
                            dr.Close();
                            returnVal = int.Parse(cmd.Parameters["@return"].Value.ToString());
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                }
                if (sets.Count == 0)
                {
                    return null;
                }
    
                return sets.First();
            }
            //根据父ID找出所有的子节点
            public string GetChildIDStr(string tabName, string pKey, string parentName, int parentID)
            {
                StringBuilder sqlStr = new StringBuilder();
                sqlStr.Append("create table #lsb(id int)  ");
                sqlStr.Append(string.Format("insert into #lsb values({0}) ", parentID));
                sqlStr.Append(string.Format("insert into #lsb select {0} from {1} where {2}={3}    ", pKey, tabName,
                                            parentName, parentID));
                sqlStr.Append(" while @@rowcount>0   ");
                sqlStr.Append(
                    string.Format(
                        "insert into #lsb select a.{0} from {1} a inner join #lsb b on a.{2}=b.id where a.{0} not in (select id from #lsb)",
                        pKey, tabName, parentName));
                sqlStr.Append("   select id from #lsb  ");
                sqlStr.Append("  drop table #lsb");
                string childSr = "";
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = new SqlCommand(sqlStr.ToString(), conn);
                    try
                    {
                        conn.Open();
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                childSr = childSr + dr[0].ToString() + ",";
                            }
                            dr.Close();
    
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                    return childSr.Trim(',');
                }
            }
    
    
            public Dictionary<string, string> GetDictionary(string sqlStr)
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    SqlCommand cmd = new SqlCommand(sqlStr, conn);
                    try
                    {
                        conn.Open();
    
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                dic.Add(dr[0].ToString(), dr[1].ToString());
                            }
                            dr.Close();
    
                        }
                    }
                    catch (Exception)
                    {
                        conn.Close();
                        throw;
                    }
                }
                return dic;
            }
    
            public SqlConnection GetConnection()
            {
                SqlConnection conn = new SqlConnection(ConnStr);
                return conn;
            }
    
            public bool ExecuteTrasaction(string sqlStr, IList<SqlParameter> param)
            {
                SqlTransaction tran = null;
                try
                {
                    using (SqlConnection conn = GetConnection())
                    {
                        conn.Open();
                        SqlCommand cmd;
                        tran = conn.BeginTransaction();
                        if (param.Count > 0)
                        {
                            cmd = new SqlCommand(sqlStr, conn, tran);
                            foreach (var sqlParam in param)
                            {
                                if (sqlParam != null)
                                {
                                    cmd.Parameters.Add(sqlParam);
                                }
    
                            }
                            cmd.ExecuteNonQuery();
                            tran.Commit();
                        }
    
                        return true;
                    }
                }
                catch
                {
                    tran.Rollback();
                }
                return false;
            }
            /// <summary>
            /// Execute a SqlCommand (that returns a resultset) against the specified SqlConnection 
            /// using the provided parameters.
            /// </summary>
            /// <remarks>
            /// e.g.:  
            ///  DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
            /// </remarks>
            /// <param name="connection">a valid SqlConnection</param>
            /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
            /// <param name="commandText">the stored procedure name or T-SQL command</param>
            /// <param name="commandParameters">an array of SqlParamters used to execute the command</param>
            /// <returns>a dataset containing the resultset generated by the command</returns>
            public DataSet ExecuteDataset(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
            {
    
                SqlConnection connection = new SqlConnection(ConnStr);
                //create a command and prepare it for execution
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);
    
                //create the DataAdapter & DataSet
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
    
                //fill the DataSet using default values for DataTable names, etc.
                da.Fill(ds);
    
                // detach the SqlParameters from the command object, so they can be used again.            
                cmd.Parameters.Clear();
                connection.Close();
                connection.Dispose();
                //return the dataset
                return ds;
    
            }
            /// <summary>
            /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters 
            /// to the provided command.
            /// </summary>
            /// <param name="command">the SqlCommand to be prepared</param>
            /// <param name="connection">a valid SqlConnection, on which to execute this command</param>
            /// <param name="transaction">a valid SqlTransaction, or 'null'</param>
            /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
            /// <param name="commandText">the stored procedure name or T-SQL command</param>
            /// <param name="commandParameters">an array of SqlParameters to be associated with the command or 'null' if no parameters are required</param>
            private void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters)
            {
                //if the provided connection is not open, we will open it
                if (connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }
    
                //associate the connection with the command
                command.Connection = connection;
    
                //set the command text (stored procedure name or SQL statement)
                command.CommandText = commandText;
    
                //if we were provided a transaction, assign it.
                if (transaction != null)
                {
                    command.Transaction = transaction;
                }
    
                //set the command type
                command.CommandType = commandType;
    
                //attach the command parameters if they are provided
                if (commandParameters != null)
                {
                    AttachParameters(command, commandParameters);
                }
                return;
            }
            /// <summary>
            /// This method is used to attach array of SqlParameters to a SqlCommand.
            /// 
            /// This method will assign a value of DbNull to any parameter with a direction of
            /// InputOutput and a value of null.  
            /// 
            /// This behavior will prevent default values from being used, but
            /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
            /// where the user provided no input value.
            /// </summary>
            /// <param name="command">The command to which the parameters will be added</param>
            /// <param name="commandParameters">an array of SqlParameters tho be added to command</param>
            private void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
            {
                foreach (SqlParameter p in commandParameters)
                {
                    //check for derived output value with no value assigned
                    if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
                    {
                        p.Value = DBNull.Value;
                    }
    
                    command.Parameters.Add(p);
                }
            }
    
            /// <summary>
            /// 执行无参数的sql语句
            /// </summary>
            /// <param name="commandText"></param>
            /// <returns></returns>
            public void ExecuteSqls(List<string> commandText)
            {
                //using (SqlConnection conn = new SqlConnection(ConnStr))
                //{
                //    conn.Open();
                //    SqlCommand command = new SqlCommand(commandText);
                //    command.Connection = conn;
                //    return command.ExecuteNonQuery();
                //}
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            cmd.Connection = conn;
                            cmd.Transaction = trans;
                            //循环
                            foreach (string sql in commandText)
                            {
                                cmd.CommandText = sql;
                                cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            conn.Close();
                            throw ex;
                        }
                        finally
                        {
                            conn.Close();
                        }
                    }
    
                }
            }
            /// <summary>
            /// 批量执行带参数的sql语句
            /// </summary>
            /// <param name="sqlList"></param>
            public void ExecuteSqlsParameter(List<KeyValuePair<object, object>> sqlList)
            {
                using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            cmd.Connection = conn;
                            cmd.Transaction = trans;
                            //循环
                            foreach (KeyValuePair<object, object> sql in sqlList)
                            {
                                cmd.CommandText = sql.Key.ToString();
                                foreach (SqlParameter item in (SqlParameter[])sql.Value)
                                {
                                    cmd.Parameters.Add(item);
                                }
                                cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            conn.Close();
                            throw ex;
                        }
                        finally
                        {
                            conn.Close();
                        }
                    }
    
                }
            }
    
    
            #region 设置SqlCommand对象
            /// <summary>
            /// 设置SqlCommand对象       
            /// </summary>
            /// <param name="cmd">SqlCommand对象 </param>
            /// <param name="cmdText">命令文本</param>
            /// <param name="cmdType">命令类型</param>
            /// <param name="cmdParms">参数集合</param>
            private static void SetCommand(SqlCommand cmd, string cmdText, CommandType cmdType,SqlConnection conn, SqlParameter[] cmdParms)
            {
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
                cmd.CommandType = cmdType;
                if (cmdParms != null)
                {
                    cmd.Parameters.AddRange(cmdParms);
                }
            }
            #endregion
    
        }
    }
  • 相关阅读:
    Sql Serer 常用函数
    分享5个viewport相关的jQuery插件 java程序员
    struts2.xml中使用chain和redirectAction这两个类型结果(typeresult)时,报检查错误(validation) java程序员
    Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面 java程序员
    详解struts2中struts.properties java程序员
    Struts2输入校验总结 java程序员
    struts.xml配置文件中result的语法:<result name="" type="">xxxxx</result> java程序员
    挺立在孤独,失败与屈辱的废墟上(俞敏洪) 读书心得 java程序员
    超棒的响应式jQuery网格布局插件 grida licious java程序员
    struts2国际化 java程序员
  • 原文地址:https://www.cnblogs.com/bijiang/p/5828060.html
Copyright © 2011-2022 走看看