• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
风拂晚柳
博客园    首页    新随笔    联系   管理    订阅  订阅

C# SQLHelper

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CBL.V12.Helper
{
    public class SQLHelper
    {
        //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.    
        private static string _connectionString = "";
        public string ConnectionString
        {
            get
            {
                return _connectionString;
            }
            set
            {
                _connectionString = value;
            }
        }

        static SQLHelper()
        {
            _connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
        }
        /// <summary>
        /// 表是否存在
        /// </summary>
        /// <param name="TableName"></param>
        /// <returns></returns>
        public static bool TabExists(string TableName)
        {
            bool cmdresult = true;
            try
            {
                string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
                object obj = GetSingle(strsql);
                if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                {
                    cmdresult = false;
                }
                else
                {
                    if (int.Parse(obj.ToString()) <= 0)
                    {
                        cmdresult = false;
                    }
                }
            }
            catch
            {
                cmdresult = false;
            }
            return cmdresult;
        }

        public static bool ColumnExists(string tableName, string columnName)
        {
            bool bresult = false;
            try
            {
                string sql = string.Concat(new string[]
                {
                    "select count(1) from syscolumns where [id]=object_id('",tableName,"') and [name]='",columnName,"'"});
                object res = GetSingle(sql);
                if (object.Equals(res, null) || object.Equals(res, DBNull.Value))
                {
                    bresult = false;
                }
                else
                {
                    if (int.Parse(res.ToString()) <= 0)
                    {
                        bresult = false;
                    }
                }
            }
            catch
            {
                bresult = false;
            }
            return bresult;
        }
        /// <summary>
        /// 返回执行结果
        /// </summary>
        /// <param name="cmdText"></param>
        /// <param name="spts"></param>
        /// <returns></returns>
        public static bool Excute(string cmdText, SqlParameter[] spts)
        {
            bool result = false;
            SqlConnection sqlConnection = null;

            try
            {
                sqlConnection = new SqlConnection(_connectionString);
                sqlConnection.Open();
                SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection);
                for (int i = 0; i < spts.Length; i++)
                {
                    sqlCommand.Parameters.Add(spts[i]);

                }
                sqlCommand.ExecuteNonQuery();
                result = true;
            }
            catch (Exception ex)
            {
                Lgr.Log.Error(ex.Message, ex);
            }
            finally
            {
                if (sqlConnection != null)
                {
                    sqlConnection.Close();
                }
            }
            return result;
        }

        public static bool Exists(string strSql)
        {
            bool cmdresult = true;
            try
            {
                object obj = GetSingle(strSql);
                if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                {
                    cmdresult = false;
                }
                else
                {
                    if (int.Parse(obj.ToString()) <= 0)
                    {
                        cmdresult = false;
                    }
                }
            }
            catch
            {
                cmdresult = false;
            }
            return cmdresult;
        }
        public static bool Exists(string strSql, params SqlParameter[] cmdParms)
        {
            bool cmdresult = true;
            try
            {
                object obj = GetSingle(strSql, cmdParms);
                if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                {
                    cmdresult = false;
                }
                else
                {
                    if (int.Parse(obj.ToString()) <= 0)
                    {
                        cmdresult = false;
                    }
                }
            }
            catch
            {
                cmdresult = false;
            }
            return cmdresult;
        }
        public static int GetMaxID(string FieldName, string TableName)
        {
            int iresult = -1;
            try
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = GetSingle(strsql);
                if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                {
                    iresult = -1;
                }
                else
                {
                    iresult = int.Parse(obj.ToString());
                }
            }
            catch
            {
                iresult = -1;
            }
            return iresult;
        }
        public static void ExecuteInsertCommand(DataTable dt, bool IsDelete = false)
        {
            if (dt != null && dt.Rows.Count > 0)
            {
                if (IsDelete)
                {
                    using (SqlConnection conn = new SqlConnection(_connectionString))
                    {
                        conn.Open();
                        SqlTransaction sqlbulkTransaction = conn.BeginTransaction();
                        SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, sqlbulkTransaction);
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                        }
                        bulkCopy.DestinationTableName = dt.TableName;
                        bulkCopy.BatchSize = dt.Rows.Count;
                        try
                        {
                            new SqlCommand
                            {
                                Connection = conn,
                                CommandText = string.Format("TRUNCATE TABLE {0}", dt.TableName),
                                Transaction = sqlbulkTransaction
                            }.ExecuteNonQuery();
                            bulkCopy.WriteToServer(dt);
                            sqlbulkTransaction.Commit();
                        }
                        catch
                        {
                            sqlbulkTransaction.Rollback();
                        }
                        finally
                        {
                            conn.Close();
                            if (bulkCopy != null)
                            {
                                bulkCopy.Close();
                            }
                        }
                    }
                }
                else
                {
                    using (SqlConnection conn = new SqlConnection(_connectionString))
                    {
                        conn.Open();
                        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
                        {
                            for (int i = 0; i < dt.Columns.Count; i++)
                            {
                                bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                            }
                            bulkCopy.DestinationTableName = dt.TableName;
                            bulkCopy.BatchSize = dt.Rows.Count;
                            bulkCopy.WriteToServer(dt);
                            bulkCopy.Close();
                        }
                        conn.Close();
                    }
                }
            }
        }
        public static int ExecuteSql(string SQLString)
        {
            int result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        result = rows;
                    }
                    catch (SqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return result;
        }
        public static int ExecuteSqlByTime(string SQLString, int Times)
        {
            int result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        cmd.CommandTimeout = Times;
                        int rows = cmd.ExecuteNonQuery();
                        result = rows;
                    }
                    catch (SqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return result;
        }
        public static int ExecuteSql(List<string> SQLStringList)
        {
            int count = 0;
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand
                {
                    Connection = conn
                };
                try
                {
                    for (int i = 0; i < SQLStringList.Count; i++)
                    {
                        string strsql = SQLStringList[i];
                        if (strsql.Trim().Length > 1)
                        {
                            try
                            {
                                cmd.CommandText = strsql;
                                count += cmd.ExecuteNonQuery();
                            }
                            catch
                            {
                            }
                        }
                    }
                }
                catch
                {
                    count = 0;
                }
                finally
                {
                    conn.Close();
                }
            }
            return count;
        }
        public static int ExecuteSqlTran(List<string> SQLStringList)
        {
            int result;
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand
                {
                    Connection = conn
                };
                SqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    int count = 0;
                    for (int i = 0; i < SQLStringList.Count; i++)
                    {
                        string strsql = SQLStringList[i];
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            count += cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                    result = count;
                }
                catch
                {
                    tx.Rollback();
                    result = 0;
                }
                finally
                {
                    conn.Close();
                }
            }
            return result;
        }
        public static int ExecuteSql(string SQLString, string content)
        {
            int result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand cmd = new SqlCommand(SQLString, connection);
                SqlParameter myParameter = new SqlParameter("@content", SqlDbType.NText)
                {
                    Value = content
                };
                cmd.Parameters.Add(myParameter);
                try
                {
                    connection.Open();
                    int rows = cmd.ExecuteNonQuery();
                    result = rows;
                }
                catch (SqlException e)
                {
                    throw e;
                }
                finally
                {
                    cmd.Dispose();
                    connection.Close();
                }
            }
            return result;
        }
        public static object ExecuteSqlGet(string SQLString, string content)
        {
            object result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand cmd = new SqlCommand(SQLString, connection);
                SqlParameter myParameter = new SqlParameter("@content", SqlDbType.NText)
                {
                    Value = content
                };
                cmd.Parameters.Add(myParameter);
                try
                {
                    connection.Open();
                    object obj = cmd.ExecuteScalar();
                    if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                    {
                        result = null;
                    }
                    else
                    {
                        result = obj;
                    }
                }
                catch (SqlException e)
                {
                    throw e;
                }
                finally
                {
                    cmd.Dispose();
                    connection.Close();
                }
            }
            return result;
        }
        public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
        {
            int result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand cmd = new SqlCommand(strSQL, connection);
                SqlParameter myParameter = new SqlParameter("@fs", SqlDbType.Image)
                {
                    Value = fs
                };
                cmd.Parameters.Add(myParameter);
                try
                {
                    connection.Open();
                    int rows = cmd.ExecuteNonQuery();
                    result = rows;
                }
                catch (SqlException e)
                {
                    throw e;
                }
                finally
                {
                    cmd.Dispose();
                    connection.Close();
                }
            }
            return result;
        }
        /// <summary>
        /// 返回第一行第一列
        /// </summary>
        /// <param name="SQLString"></param>
        /// <returns></returns>
        public static object GetSingle(string SQLString)
        {
            object obj = null;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        obj = cmd.ExecuteScalar();
                        if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                        {
                            obj = null;
                        }
                    }
                    catch (SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            return obj;
        }
        /// <summary>
        /// 返回第一行第一列
        /// </summary>
        /// <param name="SQLString"></param>
        /// <param name="Times"></param>
        /// <returns></returns>
        public static object GetSingle(string SQLString, int Times)
        {
            object obj = null;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        cmd.CommandTimeout = Times;
                        obj = cmd.ExecuteScalar();
                        if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                        {
                            obj = null;
                        }
                    }
                    catch (SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            return obj;
        }

        public static SqlDataReader ExecuteReader(string SQLString)
        {
            SqlDataReader myReader = null;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        myReader = cmd.ExecuteReader();
                    }
                    catch (SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            return myReader;
        }
        public static DataSet Query(string SQLString)
        {
            DataSet ds = new DataSet();
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                try
                {
                    connection.Open();
                    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    connection.Close();
                }
            }
            return ds;
        }
        public static DataSet Query(string SQLString, int Times)
        {
            DataSet result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    new SqlDataAdapter(SQLString, connection)
                    {
                        SelectCommand =
                        {
                            CommandTimeout = Times
                        }
                    }.Fill(ds, "ds");
                }
                catch (SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    connection.Close();
                }
                result = ds;
            }
            return result;
        }
        public static bool TestConnection()
        {
            bool resut = false;
            try
            {
                using (SqlConnection con = new SqlConnection(_connectionString))
                {
                    con.Open();
                    resut = true;
                }
            }
            catch
            {
            }
            return resut;
        }
        public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
        {
            int result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        int rows = cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                        result = rows;
                    }
                    catch (SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
            return result;
        }
        public static void ExecuteSqlTran(Hashtable SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd = new SqlCommand();
                    try
                    {
                        foreach (DictionaryEntry myDE in SQLStringList)
                        {
                            PrepareCommand(cmd, conn, trans, myDE.Key.ToString(), (SqlParameter[])myDE.Value);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                }
                conn.Close();
            }
        }
        public static int ExecuteSqlTran(List<CommandInfo> cmdList)
        {
            int result;
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd = new SqlCommand();
                    try
                    {
                        int count = 0;
                        foreach (CommandInfo myDE in cmdList)
                        {
                            string cmdText = myDE.CommandText;
                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                            if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
                            {
                                if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
                                {
                                    trans.Rollback();
                                    result = 0;
                                    return result;
                                }
                                object obj = cmd.ExecuteScalar();
                                if (obj == null && obj == DBNull.Value)
                                {
                                }
                                bool isHave = Convert.ToInt32(obj) > 0;
                                if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
                                {
                                    trans.Rollback();
                                    result = 0;
                                    return result;
                                }
                                if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
                                {
                                    trans.Rollback();
                                    result = 0;
                                    return result;
                                }
                            }
                            else
                            {
                                int val = cmd.ExecuteNonQuery();
                                count += val;
                                if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
                                {
                                    trans.Rollback();
                                    result = 0;
                                    return result;
                                }
                                cmd.Parameters.Clear();
                            }
                        }
                        trans.Commit();
                        result = count;
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
            return result;
        }
        public static void ExecuteSqlTranWithIndentity(List<CommandInfo> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd = new SqlCommand();
                    try
                    {
                        int indentity = 0;
                        foreach (CommandInfo myDE in SQLStringList)
                        {
                            string cmdText = myDE.CommandText;
                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
                            SqlParameter[] array = cmdParms;
                            for (int i = 0; i < array.Length; i++)
                            {
                                SqlParameter q = array[i];
                                if (q.Direction == ParameterDirection.InputOutput)
                                {
                                    q.Value = indentity;
                                }
                            }
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                            int val = cmd.ExecuteNonQuery();
                            array = cmdParms;
                            for (int i = 0; i < array.Length; i++)
                            {
                                SqlParameter q = array[i];
                                if (q.Direction == ParameterDirection.Output)
                                {
                                    indentity = Convert.ToInt32(q.Value);
                                }
                            }
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
        }

        public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd = new SqlCommand();
                    try
                    {
                        int indentity = 0;
                        foreach (DictionaryEntry myDE in SQLStringList)
                        {
                            string cmdText = myDE.Key.ToString();
                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
                            SqlParameter[] array = cmdParms;
                            for (int i = 0; i < array.Length; i++)
                            {
                                SqlParameter q = array[i];
                                if (q.Direction == ParameterDirection.InputOutput)
                                {
                                    q.Value = indentity;
                                }
                            }
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                            int val = cmd.ExecuteNonQuery();
                            array = cmdParms;
                            for (int i = 0; i < array.Length; i++)
                            {
                                SqlParameter q = array[i];
                                if (q.Direction == ParameterDirection.Output)
                                {
                                    indentity = Convert.ToInt32(q.Value);
                                }
                            }
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    catch
                    {
                        trans.Rollback();
                        throw;
                    }
                }
                conn.Close();
            }
        }
        public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
        {
            object result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        object obj = cmd.ExecuteScalar();
                        cmd.Parameters.Clear();
                        if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
                        {
                            result = null;
                        }
                        else
                        {
                            result = obj;
                        }
                    }
                    catch (SqlException e)
                    {
                        throw e;
                    }
                }
            }
            return result;
        }
        public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
        {
            SqlConnection connection = new SqlConnection(_connectionString);
            SqlCommand cmd = new SqlCommand();
            SqlDataReader result;
            try
            {
                PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                result = myReader;
            }
            catch (SqlException e)
            {
                throw e;
            }
            finally
            {
                //cmd.Dispose();
                //connection.Close();
            }
            return result;
        }
        public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
        {
            DataSet result;
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        da.Fill(ds, "ds");
                        cmd.Parameters.Clear();
                    }
                    catch (SqlException ex)
                    {
                        Lgr.Log.Info(ex.Message);
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        connection.Close();
                    }
                    result = ds;
                }
            }
            return result;
        }
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }
            cmd.CommandType = CommandType.Text;
            if (cmdParms != null)
            {
                for (int i = 0; i < cmdParms.Length; i++)
                {
                    SqlParameter parameter = cmdParms[i];
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && parameter.Value == null)
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }
        public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
        {
            SqlDataReader result;
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                connection.Open();
                SqlCommand command = this.BuildQueryCommand(connection, storedProcName, parameters);
                command.CommandType = CommandType.StoredProcedure;
                SqlDataReader returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
                result = returnReader;
            }
            return result;
        }
        public DataSet RunProcedure(string storedProcName, string tableName)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                new SqlDataAdapter { SelectCommand = this.BuildQueryCommand(connection, storedProcName, null) }.Fill(dataSet, tableName);
                connection.Close();
                return dataSet;
            }

        }
        public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                new SqlDataAdapter { SelectCommand = this.BuildQueryCommand(connection, storedProcName, parameters) }.Fill(dataSet, tableName);
                connection.Close();
                return dataSet;
            }

        }
        public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                SqlDataAdapter adapter = new SqlDataAdapter
                {
                    SelectCommand = this.BuildQueryCommand(connection, storedProcName, parameters)
                };
                adapter.SelectCommand.CommandTimeout = Times;
                adapter.Fill(dataSet, tableName);
                connection.Close();
                return dataSet;
            }

        }
        private SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command = new SqlCommand(storedProcName, connection)
            {
                CommandType = CommandType.StoredProcedure
            };
            if (parameters != null)
            {
                for (int i = 0; i < parameters.Length; i++)
                {
                    SqlParameter parameter = (SqlParameter)parameters[i];
                    if (parameter != null)
                    {
                        if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && parameter.Value == null)
                        {
                            parameter.Value = DBNull.Value;
                        }
                        command.Parameters.Add(parameter);
                    }
                }
            }
            return command;
        }
        public int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                connection.Open();
                SqlCommand command = this.BuildIntCommand(connection, storedProcName, parameters);
                rowsAffected = command.ExecuteNonQuery();
                int num = (int)command.Parameters["ReturnValue"].Value;
                connection.Close();
                return num;
            }

        }
        public void RunProcedureNone(string storedProcName, IDataParameter[] parameters)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                connection.Open();
                SqlCommand command = this.BuildIntCommand(connection, storedProcName, parameters);
                command.ExecuteNonQuery();
                connection.Close();
            }
        }

        public DataSet RunProcedure(string storedProcName)
        {
            DataSet result;
            using (SqlConnection sqlConnection = new SqlConnection(this.ConnectionString))
            {
                DataSet dataSet = new DataSet();
                try
                {
                    sqlConnection.Open();
                    new SqlDataAdapter
                    {
                        SelectCommand = new SqlCommand(storedProcName, sqlConnection)
                    }.Fill(dataSet);
                }
                catch (SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    sqlConnection.Close();
                }
                result = dataSet;
            }
            return result;
        }

        private SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command = this.BuildQueryCommand(connection, storedProcName, parameters);
            command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null));
            return command;
        }
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="tblName"></param>
        /// <param name="strGetFields"></param>
        /// <param name="fldName"></param>
        /// <param name="PageSize"></param>
        /// <param name="PageIndex"></param>
        /// <param name="strWhere"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public static DataSet GetRecordByPage(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, string strWhere, out int count)
        {

            DataSet ds = new DataSet();
            try
            {
                using (SqlConnection conn = new SqlConnection(_connectionString))
                {
                    SqlCommand cmd = new SqlCommand
                    {
                        Connection = conn
                    };
                    SetParams(cmd);

                    cmd.Parameters[0].Value = tblName;
                    cmd.Parameters[1].Value = strGetFields;
                    cmd.Parameters[2].Value = fldName;
                    cmd.Parameters[3].Value = strWhere;
                    cmd.Parameters[4].Value = PageSize;
                    cmd.Parameters[5].Value = PageIndex;


                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "PROCE_PAGECHANGE";
                    cmd.CommandTimeout = 180;

                    SqlDataAdapter adapter = new SqlDataAdapter
                    {
                        SelectCommand = cmd
                    };

                    DataSet source = new DataSet();
                    adapter.Fill(ds);
                    //ds.Tables.RemoveAt(0);  

                    object o = cmd.Parameters["@TotalRecord"].Value;
                    count = (o == null || o == DBNull.Value) ? 0 : System.Convert.ToInt32(o);
                }
            }
            catch (SqlException e)
            {
                throw e;
            }
            return ds;
        }

        private static void SetParams(SqlCommand cmd)
        {
            cmd.Parameters.Add(new SqlParameter("@TableName", SqlDbType.VarChar, 255));
            cmd.Parameters.Add(new SqlParameter("@ReFieldsStr", SqlDbType.VarChar, 1000));
            cmd.Parameters.Add(new SqlParameter("@OrderString", SqlDbType.VarChar, 255));
            cmd.Parameters.Add(new SqlParameter("@WhereString", SqlDbType.VarChar, 1500));
            cmd.Parameters.Add(new SqlParameter("@PageSize", SqlDbType.Int));
            cmd.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int));


            SqlParameter param = new SqlParameter("@TotalRecord", SqlDbType.Int)
            {
                Direction = ParameterDirection.Output
            };
            cmd.Parameters.Add(param);
        }

        /// <summary>
        /// 异步执行
        /// </summary>
        /// <param name="sql"></param>
        public static void ExecAsync(string sql)
        {
            //注意不能写 using, 也不能在 finally 中关闭连接
            //连接的关闭只能在 AsyncCallback 异步调用方法中完成
            //但在 catch 中必须有关闭操作,防止万一
            SqlConnection conn = new SqlConnection(_connectionString);
            try
            {
                conn.Open();
                SqlCommand command = new SqlCommand(sql, conn);
                command.Parameters.AddWithValue("@isAsync", true);
                AsyncCallback callback = new AsyncCallback(HandleCallback);
                command.BeginExecuteNonQuery(callback, command);


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                if (conn != null)
                    conn.Close();
            }
        }

        /// <summary>
        /// 异步回调方法
        /// </summary>
        /// <param name="result"></param>
        private static void HandleCallback(IAsyncResult result)
        {
            SqlCommand command = (SqlCommand)result.AsyncState;
            try
            {
                int rowCount = command.EndExecuteNonQuery(result);
                Console.WriteLine("{0:HH:mm:ss} 异步方法完成", DateTime.Now);
                //PrintInto();
                //return rowCount;
                //this.Invoke(myDataDelegate, dataTable);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error :{0}", ex.Message);
                //return 0;
            }
            finally
            {
                if (command.Connection != null)
                    command.Connection.Close();
            }
        }
        /// <summary>
        /// 输出表内容
        /// </summary>
        private static void PrintInto()
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("select isAsync,cnt from dbo.TestAsync", conn);
                SqlDataReader sdr = cmd.ExecuteReader();
                while (sdr.Read())
                {
                    //Lgr.Log.Info("isAsync:{0}\t cnt:{1}", sdr["isAsync"], sdr["cnt"]);
                }
            }
        }

        public static bool UpdateTable(DataTable dt, string SQLString, string key, SqlConnection conn, SqlTransaction trans, SqlParameter[] cmdParms)
        {
            bool result = false;
            using (SqlCommand cmd = new SqlCommand(SQLString, conn))
            {

                cmd.Transaction = trans;
                cmd.Parameters.Clear();
                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);


                    }
                }


                DataTable tempDT = new DataTable();
                DataTable dsTable = null;
                //DataSet dataset = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                SqlCommandBuilder cb = new SqlCommandBuilder(adapter)
                {
                    QuotePrefix = "[",
                    QuoteSuffix = "]"
                };
                try
                {
                    if (conn.State != ConnectionState.Open)
                        conn.Open();

                     adapter.Fill(tempDT);



                    //DataTable tempDT = new DataTable();
                    //DataTable dsTable = null;
                    //设置DataTable主键字段
                    tempDT.PrimaryKey = new DataColumn[] { tempDT.Columns[key] };
                    //取DataSet中表1的数据,此处的dsTable是用于盛放从Excel表中读出的数据
                    dsTable = dt;
                    dsTable.PrimaryKey = new DataColumn[] { dsTable.Columns[key] };
                    //遍历dsTable中的每一行数据
                    foreach (DataRow dr in dsTable.Rows)
                    {
                        //Lgr.Log.Info(dr["F_FullName"].ToString());
                        //在tempDT中查找数据库中是否已经存在该条数据
                        DataRow modyRow = tempDT.Rows.Find(dr[key]);
                        //如果数据库已经存在该行,则修改记录,不进行插入
                        if (modyRow != null)
                        {
                            //设置该行记录为“已修改”状态,次操作必须。
                            tempDT.Rows.Find(dr[key]).SetModified();
                            //重新给该记录赋值
                            tempDT.Rows.Find(dr[key]).ItemArray = dr.ItemArray;
                        }
                        else
                        {
                            //新增
                            //dr["F_ModuleId"] = keyValue;
                            tempDT.Rows.Add(dr.ItemArray);
                        }
                    }
                    //删除不在表内的数据
                    foreach (DataRow row in tempDT.Rows)
                    {
                        DataRow modyRow = dsTable.Rows.Find(row[key]);
                        if (modyRow == null)
                        {
                            tempDT.Rows.Find(row[key]).Delete();
                        }

                    }

                    adapter.Update(tempDT);//对表的更新提交到数据库

                    result = true;
                }
                catch (SqlException ex)
                {
                    Lgr.Log.Error("", ex);
                    trans.Rollback();
                    throw ex;
                }
                finally
                {
                    //conn.Close();
                }
            }
            return result;
        }

        public static bool UpdateTable(DataSet ds, string SQLString, string key, SqlConnection conn, SqlTransaction trans, string keyValue, SqlParameter[] cmdParms)
        {
            bool result = false;
            using (SqlCommand cmd = new SqlCommand(SQLString, conn))
            {

                cmd.Transaction = trans;
                cmd.Parameters.Clear();
                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);


                    }
                }


                DataTable tempDT = new DataTable();
                DataTable dsTable = null;
                //DataSet dataset = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                SqlCommandBuilder cb = new SqlCommandBuilder(adapter)
                {
                    QuotePrefix = "[",
                    QuoteSuffix = "]"
                };
                try
                {
                    if (conn.State != ConnectionState.Open)
                        conn.Open();

                    adapter.Fill(tempDT);



                    //DataTable tempDT = new DataTable();
                    //DataTable dsTable = null;
                    //设置DataTable主键字段
                    tempDT.PrimaryKey = new DataColumn[] { tempDT.Columns[key] };
                    //取DataSet中表1的数据,此处的dsTable是用于盛放从Excel表中读出的数据
                    dsTable = ds.Tables[0];
                    dsTable.PrimaryKey = new DataColumn[] { dsTable.Columns[key] };
                    //遍历dsTable中的每一行数据
                    foreach (DataRow dr in dsTable.Rows)
                    {
                        //Lgr.Log.Info(dr["F_FullName"].ToString());
                        //在tempDT中查找数据库中是否已经存在该条数据
                        DataRow modyRow = tempDT.Rows.Find(dr[key]);
                        //如果数据库已经存在该行,则修改记录,不进行插入
                        if (modyRow != null)
                        {
                            //设置该行记录为“已修改”状态,次操作必须。
                            tempDT.Rows.Find(dr[key]).SetModified();
                            //重新给该记录赋值
                            tempDT.Rows.Find(dr[key]).ItemArray = dr.ItemArray;
                        }
                        else
                        {
                            //新增
                            //dr["F_ModuleId"] = keyValue;
                            tempDT.Rows.Add(dr.ItemArray);
                        }
                    }
                    //删除不在表内的数据
                    foreach (DataRow row in tempDT.Rows)
                    {
                        DataRow modyRow = dsTable.Rows.Find(row[key]);
                        if (modyRow == null)
                        {
                            tempDT.Rows.Find(row[key]).Delete();
                        }

                    }

                    adapter.Update(tempDT);//对表的更新提交到数据库

                    result = true;
                }
                catch (SqlException ex)
                {
                    Lgr.Log.Error("", ex);
                    trans.Rollback();
                    throw ex;
                }
                finally
                {
                    //conn.Close();
                }
            }
            return result;
        }
    }
}

 

posted @ 2019-03-04 16:44  风拂晚柳  阅读(1138)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3