• dbsql


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Collections;
    using System.Data;
    using System.IO;
    using System.Web;
    using System.Web.Util;


    namespace FML.Utility
    {
        /// <summary>
        /// Copyright (C) 2004-2008 LiTianPing
        /// 数据访问基础类(基于SQLServer)
        /// 用户可以修改满足自己项目的需要。
        /// </summary>
        public abstract class DbHelperSQL
        {
            //数据库连接字符串(web.config来配置)

           // public static string connectionString = @"server=127.0.0.1;user id=sa;password=123456;database=msgData";//
            public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
              
            public DbHelperSQL()
            {
            }

            #region 记录日志文件 LastModified:2009-6-8 by uEyoogoCommon
            private static void writeLog(Exception ex, string ExecuteString,string strSql)
            {
                string LogFilename = VirtualPathUtility.ToAbsolute("~/") + "log/sqlErrorLog" + StrObj.FormatDatetime(DateTime.Now, 10) + ".txt";
           
                string BR = Environment.NewLine, BRBR = string.Format("{0}{1}", Environment.NewLine, Environment.NewLine);
                string errmsg = "";
                try { errmsg = string.Format("{0}{1}{2}{3}", ex.Message, BR, ex.StackTrace, BR); }
                catch { }
                string log = string.Concat(new object[]{
                     "["
                    , ExecuteString
                    ,"-"
                    , StrObj.FormatDatetime(DateTime.Now, 6)
                    ,"]:"
                    ,strSql
                    , BR
                    , errmsg
                    , BR
                    , HttpContext.Current.Request.RawUrl
                    , BRBR
                });
                try
                {
                    IO.WriteTxtFile(LogFilename, log, true);
                }
                catch {}
            }
            #endregion

            #region 公用方法
           
            public static int GetMaxID(string FieldName, string TableName)
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = GetSingle(strsql);
                if (obj == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }

            public static int GetRecordCount(string TableName, string strWhere)
            {
                string strSql = "select count(1) from " + TableName;
                if (strWhere.Trim() != "")
                {
                    strSql = strSql +strWhere;
                }
                object obj = GetSingle(strSql);
                if (obj == null)
                {
                    return -1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }

           

            public static bool Exists(string strSql, params SqlParameter[] cmdParms)
            {
                object obj = GetSingle(strSql, cmdParms);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }

            //public static void writelog(string loginfo)
            //{
            //    string FullFileName = ("d:\\log.txt");
            //    //  string FullFileName = Session["RootPath"];
            //    FileStream fs = new FileStream(FullFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
            //    fs.Seek(0, SeekOrigin.End);
            //    StreamWriter sw = new StreamWriter(fs);
            //    sw.WriteLine(loginfo);
            //    sw.Close();
            //    fs.Close();/**/
            //}

            #endregion

            #region  执行简单SQL语句

            /// <summary>
            /// 执行SQL语句,返回影响的记录数
            /// </summary>
            /// <param name="SQLString">SQL语句</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSql(string SQLString)
            {
                int rows = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                    {
                        try
                        {
                            //    writelog(SQLString);
                            connection.Open();
                            rows = cmd.ExecuteNonQuery();
                        }
                        catch (System.Data.SqlClient.SqlException E)
                        {
                            connection.Close();
                            writeLog(E, "ExecuteSql",SQLString);
                            //throw new Exception(E.Message);
                        }
                    }
                }
                return rows;
            }

            /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="SQLStringList">多条SQL语句</param>  
            public static bool ExecuteSqlTran(ArrayList SQLStringList)
            {
                bool success = false;
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    SqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    try
                    {
                        for (int n = 0; n < SQLStringList.Count; n++)
                        {
                            string strsql = SQLStringList[n].ToString();
                            if (strsql.Trim().Length > 1)
                            {
                                cmd.CommandText = strsql;
                                cmd.ExecuteNonQuery();
                            }
                        }
                        tx.Commit();
                        success = true;
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        tx.Rollback();
                        writeLog(E,"ExecuteSqlTran",SQLStringList.ToString());
                        //throw E;              
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                return success;
            }
            /// <summary>
            /// 执行带一个存储过程参数的的SQL语句。
            /// </summary>
            /// <param name="SQLString">SQL语句</param>
            /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSql(string SQLString, string content)
            {
                int rows = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand(SQLString, connection);
                    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
                    myParameter.Value = content;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        rows = cmd.ExecuteNonQuery();
                        //return rows;
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        writeLog(E,"ExecuteSql",SQLString);
                        //throw new Exception(E.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
                return rows;
            }
            /// <summary>
            /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
            /// </summary>
            /// <param name="strSQL">SQL语句</param>
            /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
            {
                int rows = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand(strSQL, connection);
                    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
                    myParameter.Value = fs;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        rows = cmd.ExecuteNonQuery();
                        //return rows;
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        writeLog(E, "ExecuteSqlInsertImg", strSQL);
                        //throw new Exception(E.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
                return rows;
            }

            /// <summary>
            /// 执行一条计算查询结果语句,返回查询结果(object)。
            /// </summary>
            /// <param name="SQLString">计算查询结果语句</param>
            /// <returns>查询结果(object)</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, System.DBNull.Value)))
                            {
                                //return null;
                                obj = "";
                            }
                            //else
                            //{
                            //    return obj;
                            //}    
                        }
                        catch (System.Data.SqlClient.SqlException e)
                        {
                            connection.Close();
                            writeLog(e,"GetSingle",SQLString);
                        }
                    }
                }
                return obj;
            }
            /// <summary>
            /// 执行查询语句,返回SqlDataReader
            /// </summary>
            /// <param name="strSQL">查询语句</param>
            /// <returns>SqlDataReader</returns>
            public static SqlDataReader ExecuteReader(string strSQL)
            {
                SqlDataReader myReader = null;
                SqlConnection connection = new SqlConnection(connectionString);
                SqlCommand cmd = new SqlCommand(strSQL, connection);
                try
                {
                    connection.Open();
                    myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    //return myReader;
                }
                catch (System.Data.SqlClient.SqlException e)
                {
                    connection.Close();
                    writeLog(e, "SqlDataReader", strSQL);
                }
                return myReader;
            }
            /// <summary>
            /// 执行查询语句,返回DataSet
            /// </summary>
            /// <param name="SQLString">查询语句</param>
            /// <returns>DataSet</returns>
            public static DataSet Query(string SQLString)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    DataSet ds = new DataSet();

                    try
                    {
                        connection.Open();
                        SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                        command.Fill(ds);
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        connection.Close();
                        writeLog(ex,"Query",SQLString);
                    }
                    return ds;
                }
            }
            #endregion

            #region 执行带参数的SQL语句

            /// <summary>
            /// 执行SQL语句,返回影响的记录数
            /// </summary>
            /// <param name="SQLString">SQL语句</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
            {
                int rows = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        try
                        {
                            PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                            rows = cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();                         
                        }
                        catch (System.Data.SqlClient.SqlException E)
                        {
                            connection.Close();
                            writeLog(E, "ExecuteSql", SQLString);
                        }
                    }
                }
                return rows;
            }


            /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
            public static bool ExecuteSqlTran(Hashtable SQLStringList)
            {
                bool success = false;
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            //循环
                            foreach (DictionaryEntry myDE in SQLStringList)
                            {
                                string cmdText = myDE.Key.ToString();
                                SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
                                PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                                int val = cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                            success = true;
                        }
                        catch (System.Exception e)
                        {
                            success = false;
                            trans.Rollback();
                            writeLog(e, "ExecuteSqlTran", SQLStringList.ToString());
                        }
                        finally
                        {
                            conn.Close();
                        }
                    }
                }
                return success;
            }


            /// <summary>
            /// 执行一条计算查询结果语句,返回查询结果(object)。
            /// </summary>
            /// <param name="SQLString">计算查询结果语句</param>
            /// <returns>查询结果(object)</returns>
            public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
            {
                object obj = null;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        try
                        {
                            PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                            obj = cmd.ExecuteScalar();
                            cmd.Parameters.Clear();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                obj = null;
                            }
                              
                        }
                        catch (System.Data.SqlClient.SqlException e)
                        {
                            connection.Close();
                            writeLog(e, "GetSingle", SQLString);
                        }
                    }
                }
                return obj;
            }

            /// <summary>
            /// 执行查询语句,返回SqlDataReader
            /// </summary>
            /// <param name="strSQL">查询语句</param>
            /// <returns>SqlDataReader</returns>
            public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
            {
                SqlDataReader myReader = null;
                SqlConnection connection = new SqlConnection(connectionString);
                SqlCommand cmd = new SqlCommand();
                try
                {
                    PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                    myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    //return myReader;
                }
                catch (System.Data.SqlClient.SqlException e)
                {
                    connection.Close();
                    writeLog(e, "ExecuteReader", SQLString);
                }
                return myReader;
            }

            /// <summary>
            /// 执行查询语句,返回DataSet
            /// </summary>
            /// <param name="SQLString">查询语句</param>
            /// <returns>DataSet</returns>
            public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandTimeout = 120;
                    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 (System.Data.SqlClient.SqlException ex)
                        {
                            connection.Close();
                            writeLog(ex, "Query", SQLString);
                        }
                        return ds;
                    }
                }
            }


            public 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;//cmdType;
                if (cmdParms != null)
                {
                    foreach (SqlParameter parm in cmdParms)                   
                        cmd.Parameters.Add(parm);
                }
            }


         

            #endregion

            #region 存储过程操作

            /// <summary>
            /// 执行存储过程
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns>SqlDataReader</returns>
            public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
            {
                SqlConnection connection = new SqlConnection(connectionString);
                SqlDataReader returnReader = null;
                connection.Open();
                SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
                command.CommandType = CommandType.StoredProcedure;
                try
                {
                    returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception ex)
                {
                    connection.Close();
                    writeLog(ex, "RunProcedure", storedProcName);
                }
                return returnReader;
            }


            /// <summary>
            /// 执行存储过程
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <param name="tableName">DataSet结果中的表名</param>
            /// <returns>DataSet</returns>
            public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    SqlDataAdapter sqlDA = new SqlDataAdapter();
                    sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    sqlDA.Fill(dataSet, tableName);
                    //connection.Close();
                    return dataSet;
                }
            }


            /// <summary>
            /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
            /// </summary>
            /// <param name="connection">数据库连接</param>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns>SqlCommand</returns>
            private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
            {
                SqlCommand command = new SqlCommand(storedProcName, connection);
                command.CommandType = CommandType.StoredProcedure;
                foreach (SqlParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                return command;
            }

            /// <summary>
            /// 执行存储过程,返回影响的行数  
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <param name="rowsAffected">影响的行数</param>
            /// <returns></returns>
            public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    int result;
                    connection.Open();
                    SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
                    rowsAffected = command.ExecuteNonQuery();
                    result = (int)command.Parameters["ReturnValue"].Value;
                    //Connection.Close();
                    return result;
                }
            }
            //存储过程操作
            public static bool ExecuteProcedure(string storedProcName, IDataParameter[] parameters)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    try
                    {
                        connection.Open();
                        SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); ;
                        command.ExecuteNonQuery();
                        return true;
                    }
                    catch (SqlException ex)
                    {
                        connection.Close();
                        writeLog(ex, "ExecuteProcedure", storedProcName);
                        return false;                 
                    }
                }
            }

            /// <summary>
            /// 创建 SqlCommand 对象实例(用来返回一个整数值) 
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns>SqlCommand 对象实例</returns>
            private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
            {
                SqlCommand command = 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;
            }
            #endregion

            #region 自定义 存储过程操作
            /// <summary>
            /// 创建 SqlCommand 对象实例
            /// by gaoll 2007-05-16 
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns>SqlCommand 对象实例</returns>
            private static SqlCommand BuildStringCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
            {
                SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
                return command;
            }

            /// <summary>
            /// 执行存储过程,返回return值 
            ///  by crl 2007-05-16
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns></returns>
            public static DataSet QueryProcedure(string storedProcName, IDataParameter[] parameters)
            {
                DataSet ds = new DataSet();
                try
                {
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        connection.Open();
                        SqlCommand command = BuildStringCommand(connection, storedProcName, parameters);
                        command.ExecuteNonQuery();
                        SqlDataAdapter dp = new SqlDataAdapter(command);
                        ds = new DataSet();
                        dp.Fill(ds);
                        return ds;
                    }
                }
                catch (SqlException ex)
                {
                    writeLog(ex, "QueryProcedure", storedProcName);
                    return ds; 
                }
            }
            #endregion 自定义 存储过程操作
        }
    }

  • 相关阅读:
    前端学习笔记之BOM和DOM
    JAVA学习笔记之图解JAVA参数传递
    Python学习笔记之函数参数传递 传值还是传引用
    Java学习笔记之对象的复制和克隆
    如何科学正确的使用搜索引擎
    JAVA学习笔记之JAVA 对象引用以及赋值
    前端学习笔记之Z-index详解
    Python面试题目之Python的复制和赋值浅析
    Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration
    判断对象是否为数组/函数
  • 原文地址:https://www.cnblogs.com/xiaogelove/p/2417617.html
Copyright © 2020-2023  润新知