zoukankan      html  css  js  c++  java
  • DBUtility SqlHelp

    using System;
    using System.Data;
    using System.Collections;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using DBUtility.ConfigurationHelp;//个人设定的配置类
    namespace DBUtility.SqlHelp
    {
    /// <summary>
    /// 数据库操作基类
    /// 实现对Sql数据库的各种操作
    /// </summary>
    public abstract class DbHelperSQL
    {
    #region 变量声明

    private static string connectionString = ConnectionStringAdmin.BaiHuoGu;//得到 连接数据库的字符串
    private static SqlConnection connectionAnyWhere;//创建SQL连接
    private DataSet ds = null; //创建数据集
    #endregion

    public DbHelperSQL()
    {
    }
    #region 打开/关闭数据库连接
    /// <summary>
    /// 打开数据库连接
    /// </summary>
    private static void OpenConnection()
    {
    #region
    try
    {
    connectionAnyWhere = new SqlConnection(connectionString);
    if (connectionAnyWhere.State != System.Data.ConnectionState.Open)
    {
    connectionAnyWhere.Open();
    }
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
    throw ex;
    }
    #endregion
    }

    /// <summary>
    /// 关闭数据库连接
    /// </summary>
    public static void CloseConnection()
    {
    #region
    try
    {
    if (connectionAnyWhere != null)
    {
    if (connectionAnyWhere.State != System.Data.ConnectionState.Closed)
    {
    connectionAnyWhere.Close();
    connectionAnyWhere.Dispose();
    }
    }
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
    throw ex;
    }
    #endregion
    }
    #endregion

    #region 关闭数据库和清除DateSet对象
    /// <summary>
    /// 关闭数据库和清除DateSet对象
    /// </summary>
    public void CloseConnectionAndDateSet()
    {
    if (ds != null) // 清除DataSet对象
    {
    ds.Clear();
    }
    if (connectionAnyWhere != null)
    {
    connectionAnyWhere.Close(); // 关闭数据库连接
    connectionAnyWhere.Dispose();
    }
    }
    #endregion

    #region 执行简单Sql语句
    /// <summary>
    /// 执行Sql语句
    /// </summary>
    /// <param name="strSql"></param>
    public static int ExecuteNonQuery(string strSql)
    {
    #region
    int rowscount = 0;
    SqlCommand cmd = null;
    try
    {
    OpenConnection();
    cmd = new SqlCommand(strSql, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    rowscount = cmd.ExecuteNonQuery();
    }
    catch (SqlException sqlex) { throw sqlex; }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    ////CloseConnection();
    }
    return rowscount;
    #endregion
    }

    /// <summary>
    /// 执行查询语句,返回DataSet
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <returns>DataSet</returns>
    public static DataSet Query(string strSql)
    {
    OpenConnection();
    SqlCommand cmd = new SqlCommand(strSql, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    DataSet ds = null;
    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
    {
    try
    {
    ds = new DataSet();
    da.Fill(ds, "ds");
    cmd.Parameters.Clear();
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
    throw new Exception(ex.Message);
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    ////CloseConnection();
    }
    return ds;
    }
    }

    /// <summary>
    /// 执行SQL语句,并返回第一行第一列结果
    /// </summary>
    /// <param name="strSql">SQL语句</param>
    /// <returns></returns>
    public static string ExecuteScalar(string strSql)
    {
    #region
    string strReturn = "";
    SqlCommand cmd = null;
    OpenConnection();
    try
    {
    cmd = new SqlCommand(strSql, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    strReturn = cmd.ExecuteScalar().ToString();
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    ////CloseConnection();
    }
    return strReturn;
    #endregion
    }

    /// <summary>
    /// 执行带一个存储过程参数的的SQL语句。
    /// </summary>
    /// <param name="SQLString">SQL语句</param>
    /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
    /// <returns>影响的记录数[返回整型值]</returns>
    public static int ExecuteNonQuery(string strSQL, string content)
    {

    OpenConnection();
    SqlCommand cmd = new SqlCommand(strSQL, connectionAnyWhere);
    try
    {
    cmd.CommandTimeout = 60;
    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
    myParameter.Value = content;
    cmd.Parameters.Add(myParameter);

    int rows = cmd.ExecuteNonQuery();
    return rows;
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    }

    /// <summary>
    /// 执行带一个存储过程参数的的SQL语句。
    /// </summary>
    /// <param name="SQLString">SQL语句</param>
    /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
    /// <returns>影响的记录数[返回object]</returns>
    public static object ExecuteSqlGet(string strSQL, string content)
    {
    OpenConnection();
    using (SqlCommand cmd = new SqlCommand(strSQL, connectionAnyWhere))
    {
    try
    {
    cmd.CommandTimeout = 60;
    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
    myParameter.Value = content;
    cmd.Parameters.Add(myParameter);

    object obj = cmd.ExecuteScalar();
    if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
    {
    return null;
    }
    else
    {
    return obj;
    }
    }
    catch (System.Data.SqlClient.SqlException E)
    {
    throw new Exception(E.Message);
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    }
    }

    /// <summary>
    /// 执行多条SQL语句,实现数据库事务。
    /// </summary>
    /// <param name="SQLStringList">多条SQL语句</param>
    public static void ExecuteSqlTran(ArrayList SQLStringList)
    {
    OpenConnection();
    SqlCommand cmd = new SqlCommand();

    cmd.Connection = connectionAnyWhere;
    cmd.CommandTimeout = 60;
    SqlTransaction tx = connectionAnyWhere.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();
    }
    catch (System.Data.SqlClient.SqlException E)
    {
    tx.Rollback();
    throw new Exception(E.Message);
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }

    }

    /// <summary>
    /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
    /// </summary>
    /// <param name="strSQL">SQL语句</param>
    /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
    /// <returns>影响的记录数</returns>
    public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
    {
    OpenConnection();
    using (SqlCommand cmd = new SqlCommand(strSQL, connectionAnyWhere))
    {
    try
    {
    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
    myParameter.Value = fs;
    cmd.Parameters.Add(myParameter);
    cmd.CommandTimeout = 60;
    int rows = cmd.ExecuteNonQuery();
    return rows;
    }
    catch (System.Data.SqlClient.SqlException E)
    {
    throw new Exception(E.Message);
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    }
    }

    #endregion

    #region 执行带参数的SQL语句

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


    /// <summary>
    /// 执行多条SQL语句,实现数据库事务。
    /// </summary>
    /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
    public static void ExecuteSqlTran(Hashtable SQLStringList)
    {
    OpenConnection();
    using (SqlTransaction trans = connectionAnyWhere.BeginTransaction())
    {
    SqlCommand cmd = new SqlCommand();
    try
    {
    //循环
    foreach (DictionaryEntry myDE in SQLStringList)
    {
    string cmdText = myDE.Key.ToString();
    SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
    PrepareCommand(cmd, connectionAnyWhere, trans, cmdText, cmdParms);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();

    trans.Commit();
    }
    }
    catch (SqlException ex)
    {
    trans.Rollback();
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    }

    }


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

    /// <summary>
    /// 执行查询语句,返回SqlDataReader (使用该方法切记要手工关闭SqlDataReader和连接)
    /// </summary>
    /// <param name="strSQL">查询语句</param>
    /// <returns>SqlDataReader</returns>
    public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
    {
    OpenConnection();
    SqlCommand cmd = new SqlCommand();
    try
    {
    PrepareCommand(cmd, connectionAnyWhere, null, SQLString, cmdParms);
    SqlDataReader myReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    cmd.Parameters.Clear();
    return myReader;
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    //finally //不能在此关闭,否则,返回的对象将无法使用
    //{
    // cmd.Dispose();
    // connection.//CloseConnection();
    //}

    }

    /// <summary>
    /// 执行查询语句,返回DataSet
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <returns>DataSet</returns>
    public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
    {
    OpenConnection();
    SqlCommand cmd = new SqlCommand();
    PrepareCommand(cmd, connectionAnyWhere, null, SQLString, cmdParms);
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
    {
    DataSet ds = new DataSet();
    try
    {
    sda.Fill(ds, "ds");
    cmd.Parameters.Clear();
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
    throw new Exception(ex.Message);
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Dispose();
    sda.SelectCommand.Connection = null;
    //CloseConnection();
    }
    return ds;
    }
    }


    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.CommandTimeout = 60;
    cmd.CommandText = cmdText;
    if (trans != null)
    cmd.Transaction = trans;
    cmd.CommandType = CommandType.Text;//cmdType;
    if (cmdParms != null)
    {
    foreach (SqlParameter parameter in cmdParms)
    {
    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
    (parameter.Value == null))
    {
    parameter.Value = DBNull.Value;
    }
    cmd.Parameters.Add(parameter);
    }
    }
    }

    #endregion

    #region 返回 DataSet 或 DataTable
    /// <summary>
    /// 返回DataSet数据集
    /// </summary>
    /// <param name="strSql">SQL语句</param>
    public static DataSet GetDataSet(string strSql)
    {
    #region
    DataSet ds = new DataSet();
    SqlDataAdapter sda = null;
    try
    {
    OpenConnection();
    sda = new SqlDataAdapter(strSql, connectionAnyWhere);
    sda.Fill(ds);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Connection.Dispose();
    //CloseConnection();
    }
    return ds;
    #endregion
    }

    /// <summary>
    /// 添加DataSet表 返回 DataSet
    /// </summary>
    /// <param name="ds">DataSet对象</param>
    /// <param name="strSql">Sql语句</param>
    /// <param name="strTableName">表名</param>
    public static DataSet GetDataSet(DataSet ds, string strSql, string strTabName)
    {
    #region
    SqlDataAdapter sda = null;
    try
    {
    OpenConnection();
    sda = new SqlDataAdapter(strSql, connectionAnyWhere); ;
    sda.Fill(ds, strTabName);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Connection.Dispose();
    //CloseConnection();
    }
    return ds;
    #endregion
    }

    /// <summary>
    /// 返回DataTable对象
    /// </summary>
    /// <param name="strSql">SQL语句</param>
    /// <returns></returns>
    public static DataTable GetDataTable(string strSql)
    {
    #region
    DataTable dt = null;
    SqlDataAdapter sda = null;
    try
    {
    OpenConnection();
    dt = new DataTable();
    sda = new SqlDataAdapter(strSql, connectionAnyWhere);
    sda.Fill(dt);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Connection.Dispose();
    //CloseConnection();
    }
    return dt;
    #endregion
    }

    /// <summary>
    /// 返回 int 类型的值 用于统计一张表中符合条件的记录条数
    /// </summary>
    /// <param name="strSql">SQL语句</param>
    /// <returns></returns>
    public static int GetDataTableRecordCount(string strSql)
    {
    #region
    int RecordCount = 0;
    SqlDataAdapter sda = null;
    try
    {
    OpenConnection();
    sda = new SqlDataAdapter(strSql, connectionAnyWhere);
    DataTable dt = new DataTable();
    sda.Fill(dt);

    if (dt != null)
    {
    RecordCount = dt.Rows.Count;
    }
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Connection.Dispose();
    //CloseConnection();
    }
    return RecordCount;
    #endregion
    }

    /// <summary>
    /// 返回DataView数据视图
    /// </summary>
    /// <param name="strSql">Sql语句</param>
    public static DataView GetDataView(string strSql)
    {
    #region
    DataView dv = GetDataSet(strSql).Tables[0].DefaultView;
    return dv;
    #endregion
    }

    /// <summary>
    /// 返回SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接
    /// </summary>
    /// <param name="strSql">sql语句</param>
    /// <returns></returns>
    public static SqlDataReader GetDataReader(string strSql)
    {
    #region
    OpenConnection();
    SqlCommand cmd = null;
    SqlDataReader sdr = null;
    try
    {
    cmd = new SqlCommand(strSql, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    //finally
    //{
    // cmd.Connection.Close();
    // cmd.Dispose();
    //}
    return sdr;
    #endregion
    }

    #endregion

    #region 执行存储过程
    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <returns>返回存储过程返回值</returns>
    public static int RunProcedure(string procName)
    {
    #region
    int reVal = 0;
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, null);
    cmd.ExecuteNonQuery();
    reVal = (int)cmd.Parameters["ReturnValue"].Value;
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    return reVal;
    #endregion

    }

    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <returns>返回存储过程返回值</returns>
    public static DataSet RunProcedure2(string procName)
    {
    OpenConnection();
    DataSet dataSet = null;
    SqlCommand cmd = null;
    SqlDataAdapter sda = null;
    try
    {
    cmd = new SqlCommand(procName, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    cmd.CommandType = CommandType.StoredProcedure;
    sda = new SqlDataAdapter(cmd);
    dataSet = new DataSet();
    sda.Fill(dataSet);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sda.SelectCommand.Connection.Close();
    sda.SelectCommand.Dispose();
    //CloseConnection();
    }
    return dataSet;
    }

    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <returns>返回存储过程返回值</returns>
    public static int RunProcedure(string procName, SqlParameter[] prams)
    {
    #region
    int reVal = 0;
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, prams);
    cmd.ExecuteNonQuery();
    reVal = (int)cmd.Parameters["ReturnValue"].Value;
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    return reVal;
    #endregion
    }

    //2009.6.4
    /// <summary>
    /// 执行存储过程 返回 ExecuteNonQuery 方法 影响的行数
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <returns>返回 ExecuteNonQuery 方法 影响的行数</returns>
    public static int RunProcedureReExecuteNonQueryVal(string procName, SqlParameter[] prams)
    {
    #region
    int reVal = 0;
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, prams);
    reVal = cmd.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    return reVal;
    #endregion
    }

    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="storedProcName">存储过程名</param>
    /// <param name="parameters">存储过程参数</param>
    /// <returns>DataTable</returns>
    public static DataTable RunProcedureReDataTable(string storedProcName, SqlParameter[] parameters)
    {
    OpenConnection();
    DataTable dt = new DataTable();
    SqlDataAdapter sqlDA = null;
    try
    {
    sqlDA = new SqlDataAdapter();
    sqlDA.SelectCommand = CreateCommand(storedProcName, parameters);
    sqlDA.Fill(dt);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    //sqlDA.SelectCommand.Connection.Close();
    //sqlDA.SelectCommand.Connection.Dispose();
    CloseConnection();
    }
    return dt;
    }

    //2009.6.4

    //2009.3.2
    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <returns>返回存储过程返回值</returns>
    public static int RunProcedure(string procName, SqlParameter[] prams, out int rowsAffected)
    {
    #region
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, prams);
    cmd.ExecuteNonQuery();

    rowsAffected = (int)cmd.Parameters["ReturnValue"].Value;
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    return rowsAffected;
    #endregion
    }
    //2009.3.2

    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="storedProcName">存储过程名</param>
    /// <param name="parameters">存储过程参数</param>
    /// <param name="tableName">DataSet结果中的表名</param>
    /// <returns>DataSet</returns>
    public static DataSet RunProcedure(string storedProcName, SqlParameter[] parameters, string tableName)
    {
    OpenConnection();
    DataSet dataSet = new DataSet();
    SqlDataAdapter sqlDA = null;
    try
    {
    sqlDA = new SqlDataAdapter();
    sqlDA.SelectCommand = CreateCommand(storedProcName, parameters);
    sqlDA.Fill(dataSet, tableName);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    sqlDA.SelectCommand.Connection.Close();
    sqlDA.SelectCommand.Dispose();
    //CloseConnection();
    }
    return dataSet;
    }


    /// <summary>
    /// 执行存储过程返回DataReader对象
    /// </summary>
    /// <param name="procName">Sql语句</param>
    /// <param name="dataReader">DataReader对象</param>
    public static void RunProcedure(string procName, SqlDataReader dataReader)
    {
    #region
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, null);
    dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    //finally
    //{
    // cmd.Connection.Close();
    // cmd.Dispose();
    // //CloseConnection();
    //}
    #endregion
    }

    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <param name="dataReader">DataReader对象</param>
    public static void RunProcedure(string procName, SqlParameter[] prams, SqlDataReader dataReader)
    {
    #region
    SqlCommand cmd = null;
    try
    {
    cmd = CreateCommand(procName, prams);
    dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    cmd.Connection.Close();
    cmd.Dispose();
    //CloseConnection();
    }
    #endregion
    }

    /// <summary>
    /// 创建一个SqlCommand对象以此来执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <returns>返回SqlCommand对象</returns>
    private static SqlCommand CreateCommand(string procName, SqlParameter[] prams)
    {
    #region
    // 确认打开连接
    SqlCommand cmd = null;
    try
    {
    OpenConnection();
    cmd = new SqlCommand(procName, connectionAnyWhere);
    cmd.CommandTimeout = 60;
    cmd.CommandType = CommandType.StoredProcedure;

    // 依次把参数传入存储过程
    if (prams != null)
    {
    foreach (SqlParameter parameter in prams)
    cmd.Parameters.Add(parameter);
    }

    // 加入返回参数
    cmd.Parameters.Add(
    new SqlParameter("ReturnValue", SqlDbType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0,
    string.Empty, DataRowVersion.Default, null));
    }
    catch (SqlException sqlex)
    {
    throw sqlex;
    }

    return cmd;
    #endregion
    }

    /// <summary>
    /// 生成存储过程参数
    /// </summary>
    /// <param name="ParamName">存储过程名称</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <param name="Direction">参数方向</param>
    /// <param name="Value">参数值</param>
    /// <returns>新的 parameter 对象</returns>
    public static SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
    {
    #region
    SqlParameter param = null; ;
    try
    {
    if (Size > 0)
    param = new SqlParameter(ParamName, DbType, Size);
    else
    param = new SqlParameter(ParamName, DbType);

    param.Direction = Direction;
    if (!(Direction == ParameterDirection.Output && Value == null))
    param.Value = Value;
    }
    catch (SqlException ex)
    {
    throw ex;
    }

    return param;
    #endregion
    }

    /// <summary>
    /// 传入输入参数
    /// </summary>
    /// <param name="ParamName">存储过程名称</param>
    /// <param name="DbType">参数类型</param></param>
    /// <param name="Size">参数大小</param>
    /// <param name="Value">参数值</param>
    /// <returns>新的 parameter 对象</returns>
    public static SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
    {
    #region
    return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);

    #endregion
    }

    /// <summary>
    /// 传入返回值参数
    /// </summary>
    /// <param name="ParamName">存储过程名称</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <returns>新的 parameter 对象</returns>
    public static SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
    {
    #region
    return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    #endregion
    }
    #endregion

    #region 读取Excel
    /// <summary>
    /// 读取Excel
    /// </summary>
    /// <param name="Path"></param>
    /// <param name="tableName"></param>
    /// <returns></returns>
    public static DataSet ExcelToDS(string Path, string tableName)
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;"; //HDR=Yes;
    DataSet ds = null;
    using (OleDbConnection conn = new OleDbConnection(strConn))
    {
    OleDbDataAdapter myCommand = null;
    try
    {
    conn.Open();
    string strExcel = "";
    strExcel = "select * from [" + tableName + "$]";
    myCommand = new OleDbDataAdapter(strExcel, strConn);
    ds = new DataSet();
    myCommand.Fill(ds, "table1");
    }
    catch (SqlException ex)
    {
    throw ex;
    }
    finally
    {
    myCommand.Dispose();
    conn.Close();
    }
    return ds;
    }
    }

    /// <summary>
    /// 将 Excel 文件转成 DataTable
    /// </summary>
    /// <param name="strExcelFileName">Excel文件及其路径</param>
    /// <param name="strSheetName">工作表名,如:Sheet1</param>
    /// <param name="isTitleOrDataOfFirstRow">True 第一行是标题,False 第一行是数据</param>
    /// <returns>DataTable</returns>
    public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName, bool isTitleOrDataOfFirstRow)
    {

    string HDR = string.Empty;//如果第一行是数据而不是标题的话, 应该写: "HDR=No;"
    if (isTitleOrDataOfFirstRow)
    {
    HDR = "YES";//第一行是标题
    }
    else
    {
    HDR = "NO";//第一行是数据
    }
    //源的定义
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=" + HDR + ";IMEX=1';";

    //Sql语句
    //string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是一种方法
    string strExcel = "select * from [" + strSheetName + "$]";
    //定义存放的数据表
    DataSet ds = new DataSet();

    //连接数据源
    using (OleDbConnection conn = new OleDbConnection(strConn))
    {
    OleDbDataAdapter adapter = null;
    try
    {
    conn.Open();
    //适配到数据源
    adapter = new OleDbDataAdapter(strExcel, strConn);
    adapter.Fill(ds, strSheetName);
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
    throw ex;
    }
    finally
    {
    adapter.SelectCommand.Connection.Close();
    adapter.SelectCommand.Dispose();
    }
    }
    return ds.Tables[strSheetName];
    }


    #endregion

    #region 用于分页

    /// <summary>
    /// 分页方法 Pager2005
    /// </summary>
    /// <param name="tblName">表名 50</param>
    /// <param name="fldName">字段名[可以是一个字段,也可以是 * ] 5000</param>
    /// <param name="PageSize">一共几页</param>
    /// <param name="PageIndex">当前页码</param>
    /// <param name="order">排序类型 5000</param>
    /// <param name="where">查询条件 5000</param>
    /// <param name="isCount">是否要返回统计记录总数</param>
    /// <param name="totalRecord">记录总数</param>
    /// <returns>返回 DataSet </returns>
    public static DataSet GetPagerList(int pageSize, int pageIndex, string tablename, string fieldname, string where, string order, bool isCount, out int totalRecord)
    {
    totalRecord = 0;
    SqlParameter totalPageParm = new SqlParameter("@TotalPage", SqlDbType.Int);
    totalPageParm.Direction = ParameterDirection.Output;
    SqlParameter totalRecordParm = new SqlParameter("@totalRecord", SqlDbType.Int);
    totalRecordParm.Direction = ParameterDirection.Output;

    SqlParameter[] parameters = {
    new SqlParameter("@TableName", SqlDbType.VarChar, 50),
    new SqlParameter("@Fields", SqlDbType.VarChar, 5000),
    new SqlParameter("@OrderField", SqlDbType.VarChar, 5000),
    new SqlParameter("@sqlWhere", SqlDbType.VarChar, 5000),
    new SqlParameter("@pageSize", SqlDbType.Int),
    new SqlParameter("@pageIndex", SqlDbType.Int),
    new SqlParameter("@isCount", SqlDbType.Bit),
    totalPageParm,totalRecordParm
    };
    parameters[0].Value = tablename; //表、视图名称
    parameters[1].Value = fieldname; //选择字段,全选用*
    parameters[2].Value = order;
    parameters[3].Value = where;
    parameters[4].Value = pageSize;
    parameters[5].Value = pageIndex;
    parameters[6].Value = isCount;
    DataSet ds = RunProcedure("Pager2005", parameters, "PagerTable");
    if (isCount)
    {
    int.TryParse(totalRecordParm.Value.ToString(), out totalRecord);
    }
    return ds;
    }

    #endregion

    #region SQL 分页语句 及 cs 文件方法
    /*
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    CREATE Procedure [dbo].[Pager2005]
    @TableName varchar(50), --表名
    @Fields varchar(5000) = '*', --字段名(全部字段为*)
    @OrderField varchar(5000), --排序字段(必须!支持多字段)
    @sqlWhere varchar(5000) = Null,--条件语句(不用加where)
    @pageSize int, --每页多少条记录
    @pageIndex int = 1 , --指定当前为第几页
    @isCount bit,
    @TotalPage int output, --返回总页数
    @totalRecord int output
    as
    begin

    Begin Tran --开始事务

    Declare @sql nvarchar(4000);
    --Declare @totalRecord int output;

    if(@isCount =1)
    begin
    --计算总记录数

    if (@SqlWhere='' or @sqlWhere=NULL)
    set @sql = 'select @totalRecord = count(*) from ' + @TableName
    else
    set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

    EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数

    --计算总页数
    select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
    end

    if (@SqlWhere='' or @sqlWhere=NULL)
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
    else
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere


    --处理页数超出范围情况
    if @PageIndex<=0
    Set @pageIndex = 1

    if @pageIndex>@TotalPage
    Set @pageIndex = @TotalPage

    --处理开始点和结束点
    Declare @StartRecord int
    Declare @EndRecord int

    set @StartRecord = (@pageIndex-1)*@PageSize + 1
    set @EndRecord = @StartRecord + @pageSize - 1

    --继续合成sql语句
    set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)

    Exec(@Sql)
    ---------------------------------------------------
    If @@Error <> 0
    Begin
    RollBack Tran
    Return -1
    End
    Else
    Begin
    Commit Tran
    Return @totalRecord ---返回记录总数
    End
    end
    *
    /// <summary>
    ///分页获取数据列表
    /// </summary>
    /// <returns></returns>
    public static DataSet GetList(int pageSize, int pageIndex,string tablename,string fieldname, string where, string order, bool isCount, out int totalRecord)
    {
    totalRecord = 0;
    SqlParameter totalPageParm = new SqlParameter("@TotalPage", SqlDbType.Int);
    totalPageParm.Direction = ParameterDirection.Output;
    SqlParameter totalRecordParm = new SqlParameter("@totalRecord", SqlDbType.Int);
    totalRecordParm.Direction = ParameterDirection.Output;

    SqlParameter[] parameters = {
    new SqlParameter("@TableName", SqlDbType.VarChar, 50),
    new SqlParameter("@Fields", SqlDbType.VarChar, 5000),
    new SqlParameter("@OrderField", SqlDbType.VarChar, 5000),
    new SqlParameter("@sqlWhere", SqlDbType.VarChar, 5000),
    new SqlParameter("@pageSize", SqlDbType.Int),
    new SqlParameter("@pageIndex", SqlDbType.Int),
    new SqlParameter("@isCount", SqlDbType.Bit),
    totalPageParm,totalRecordParm
    };
    parameters[0].Value = tablename; //表、视图名称
    parameters[1].Value = fieldname; //选择字段,全选用*
    parameters[2].Value = order;
    parameters[3].Value = where;
    parameters[4].Value = pageSize;
    parameters[5].Value = pageIndex;
    parameters[6].Value = isCount;
    CMS.DBUtility.SQL.DBHelpSP sqp = new CMS.DBUtility.SQL.DBHelpSP();
    DataSet ds = sqp.ReturnDataSet(CMS.DBUtility.SQL.Configuration.ConnAdmin, "Page2005", parameters);
    if (isCount)
    {
    int.TryParse(totalRecordParm.Value.ToString(), out totalRecord);
    }
    return ds;
    }
    */
    #endregion
    }
    }

  • 相关阅读:
    How to use VS2012 remote debug Windows Azure Cloud Services
    vue ---05 分页和详情页功能的实现
    vue ----04课程列表的展示
    vue--03 首页和登陆注册
    luffy--03 首页和登陆注册(跨域问题的解决)
    luffy--02 ---项目配置和数据库链接
    luffy---01
    DRF---一些配置/设置
    drf-路由
    drf视图
  • 原文地址:https://www.cnblogs.com/keim/p/3672322.html
Copyright © 2011-2022 走看看