`
pcajax
  • 浏览: 2196306 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

//===============================================================================
// This file is based on the Microsoft Data Access Application Block for .NET
// 提供DAL类访问数据库的方法
//===============================================================================
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
namespace XNCJWC.DBUtility
{
/// <summary>
/// The SqlHelper class is intended to encapsulate high performance, 
/// scalable best practices for common uses of SqlClient.
/// </summary>
public abstract class SqlHelper
    {
//数据连接字符串
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
// Hashtable to 存放参数
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
/// <summary>
/// 执行一个不返回结果集的sql语句
/// </summary>
/// <remarks>
/// e.g.:  
///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">连接字符串</param>
/// <param name="commandType">命令类型(过程、文本) (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">命令的参数组</param>
/// <returns>返回受此命令影响的行数</returns>
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);
int val = -1;
try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }
catch (Exception e)
            {
throw e;
            }
finally
            {
                conn.Close();
            }
return val;
        }
/// <summary>
/// 执行一个不返回结果集的sql命令
/// </summary>
/// <remarks>
/// e.g.:  
///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">数据库连接</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>回受此命令影响的行数</returns>
public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
return val;
        }
/// <summary>
/// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction 
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="trans">an existing sql transaction</param>
/// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
/// <param name="commandText">the stored procedure name or T-SQL command</param>
/// <param name="commandParameters">an array of SqlParamters used to execute the command</param>
/// <returns>an int representing the number of rows affected by the command</returns>
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
return val;
        }
/// <summary>
/// 行一个返回结果集的命令
/// </summary>
/// <remarks>
/// e.g.:  
///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">数据库连接字符串</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>A SqlDataReader containing the results</returns>
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);
// we use a try/catch here because if the method throws an exception we want to 
// close the connection throw code, because no datareader will exist, hence the 
// commandBehaviour.CloseConnection will not work
try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
return rdr;
            }
catch
            {
                conn.Close();
throw;
            }
        }
/// <summary>
/// 行一个返回结果集的命令
/// </summary>
/// <remarks>
/// e.g.:  
///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">数据库连接字符串</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>A SqlDataReader containing the results</returns>
public static DataSet ExecuteReaderDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);
            DataSet ds = new DataSet();
// we use a try/catch here because if the method throws an exception we want to 
// close the connection throw code, because no datareader will exist, hence the 
// commandBehaviour.CloseConnection will not work
try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
// SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(ds);
                cmd.Parameters.Clear();
                conn.Close();
return ds;
            }
catch
            {
                conn.Close();
throw;
            }
        }
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="trans">an existing sql transaction</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
public static object ExecuteScalar(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
object val = null;
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
            val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
return val;
        }
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection connection = new SqlConnection(connectionString);
object val = null;
try
            {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
            }
catch (Exception e)
            {
throw e;
            }
finally
            {
                connection.Close();
            }
return val;
        }
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <remarks>
/// e.g.:  
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">命令类型(过程、文本)  (stored procedure, text, etc.)</param>
/// <param name="commandText">储存过程名或sql语句</param>
/// <param name="commandParameters">a命令的参数组</param>
/// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
return val;
        }
/// <summary>
/// add parameter array to the cache
/// </summary>
/// <param name="cacheKey">Key to the parameter cache</param>
/// <param name="cmdParms">an array of SqlParamters to be cached</param>
public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
        {
            parmCache[cacheKey] = commandParameters;
        }
/// <summary>
/// Retrieve cached parameters
/// </summary>
/// <param name="cacheKey">key used to lookup parameters</param>
/// <returns>Cached SqlParamters array</returns>
public static SqlParameter[] GetCachedParameters(string cacheKey)
        {
            SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
if (cachedParms == null)
return null;
            SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
for (int i = 0, j = cachedParms.Length; i < j; i++)
                clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
return clonedParms;
        }
/// <summary>
/// Prepare a command for execution
/// </summary>
/// <param name="cmd">SqlCommand object</param>
/// <param name="conn">SqlConnection object</param>
/// <param name="trans">SqlTransaction object</param>
/// <param name="cmdType">Cmd type e.g. stored procedure or text</param>
/// <param name="cmdText">Command text, e.g. Select * from Products</param>
/// <param name="cmdParms">SqlParameters to use in the command</param>
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, 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 = cmdType;
if (cmdParms != null)
            {
foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
#region 返回数据集
/// <summary>
/// 返回数据集
/// </summary>
/// <param name="sqlstring">SQL语句</param>
/// <returns>数据集</returns>
public static DataSet GetDs(string connectionString, string sqlString)
        {
            SqlConnection con = new SqlConnection(connectionString);
            DataSet ds = null;
try
            {
                con.Open();
                SqlDataAdapter sda = new SqlDataAdapter(sqlString, con);
                ds = new DataSet();
                sda.Fill(ds);
            }
catch (Exception e)
            {
throw e;
            }
finally
            {
                con.Close();
                con.Dispose();
            }
return ds;
        }
#endregion
#region 获取数据视图
/// <summary>
/// 获取数据视图
/// </summary>
/// <param name="sqlstring">SQL语句</param>
/// <returns>数据视图</returns>
public static DataView GetDv(string connectionString, string sqlString)
        {
return GetDs(connectionString, sqlString).Tables[0].DefaultView;
        }
#endregion
#region 获取数据表
/// <summary>
/// 获取数据表
/// </summary>
/// <param name="sqlstring">SQL语句</param>
/// <returns>数据表</returns>
public static DataTable GetDt(string connectionString, string sqlString)
        {
            DataTable dt = GetDs(connectionString, sqlString).Tables[0];
return dt;
        }
#endregion
    }
}

分享到:
评论

相关推荐

    SQL+HELP.rar_Help!_sql help_sql 语句 帮助文档

    _sql help_sql 语句 帮助文档”压缩包提供了对SQL语言的中文帮助文档,旨在帮助初学者和有经验的用户更深入地理解SQL的用法。 在《SQL+HELP》+HELP.chm文件中,你可能会找到以下关键知识点: 1. **SQL基础**:SQL...

    SQL Help.rar_Help!_sql_sql server_sqlhelp sqlserver

    本压缩包"SQL Help.rar_Help!_sql_sql server_sqlhelp sqlserver"显然是为了提供SQL Server的相关帮助文档和资源。 首先,我们关注到"SQL.htm"这个文件,这很可能是SQL语言的基本教程或者参考手册,通常会包含SQL的...

    Quest Central For Sql Help

    《Quest Central For Sql Help》是针对SQL数据库管理的工具Quest Central的重要帮助文档,主要面向英文用户,旨在提供全面且深入的SQL操作指南和技术支持。在本文中,我们将深入探讨Quest Central的功能、SQL管理的...

    oracle_sql_help.1.0.zip_Help!

    Oracle SQL Help 提供了关于Oracle数据库管理系统的SQL语言详尽指南。这个压缩包"oracle_sql_help.1.0.zip_Help!"显然是一个针对Oracle DBA(数据库管理员)和PG(可能是Programmer或Power User)超级用户的资源,...

    help.sql 脚本

    《SQL脚本帮助指南——以help.sql为例》 在信息技术领域,数据库管理是不可或缺的一环,而SQL(Structured Query Language)则是与数据库交互的主要语言。本文将深入探讨一个名为"help.sql"的脚本,它作为数据库...

    sql_plus的使用

    为了查看帮助信息,可以使用`HELP`命令,或者查询特定的SQL或PL/SQL语法,例如: ```sql HELP SELECT; ``` 在处理大量数据时,可以利用SQL Plus的批处理特性,通过`ACCEPT`命令获取用户输入,或者使用`SPOOL`命令...

    LabWindows/CVI SQL Toolkit Help

    LabWindows/CVI SQL Toolkit Help

    给oracle的sqlplus安装更齐全的help文档(help.sql文件和安装方法)

    在$ORACLE_HOME/sqlplus/admin/help 包含了四个文件:helpbld.sql helpdrop.sql helpus.sql hlpbld.sql helpbld.sql实际是调用第四个脚本hlpbld.sql来进行安装的 helpdrop.sql是删除help表和HELP_TEMP_VIEW视图的...

    sql sp_help

    `sql sp_help` 是一个非常实用的 Transact-SQL 存储过程,它提供有关 SQL Server 数据库中各种对象的详细信息。对于初学者来说,它是一个很好的学习工具,可以帮助理解表的结构、属性和数据类型。下面我们将深入探讨...

    plsql语法帮助 hlp版本

    PL/SQL Help和sqlHelp可能是两个独立的辅助工具,它们可能包含了这些函数的详细描述、用法示例和可能的搜索功能,方便开发者快速查找和学习。 `Sqlhelp.GID`和`Sqlhelp.hlp`可能是SQL Help的索引文件和帮助文件,...

    sql_help.rar_Help!

    在“sql_help.rar_Help!”这个压缩包中,包含的“sql_help.chm”文件很可能是一个关于SQL的离线帮助文档,旨在为开发者提供详尽的SQL语法和操作指南。 SQL的基本知识点包括: 1. 数据库概念:SQL主要用于关系型...

    SQLServer_help.rar_SQL API chm_sql server api_sql server api chm

    《SQL Server API详解》 SQL Server作为一款广泛应用的关系型数据库管理系统,其强大的API(应用程序编程接口)为开发者提供了丰富的功能,使得数据管理、查询、分析等任务变得更为便捷。本资料集是关于SQL Server ...

    SQL_help.rar_数据库 help

    "SQL_help.rar_数据库 help" 提供的压缩包文件很可能包含了一位专家整理的关于如何高效连接和操作数据库的类文件及指南。这个资源对于开发者来说尤其有用,因为它可以帮助他们更轻松地调用数据库,避免重复编写相同...

    sql--help.rar_Help!

    标题中的"sql--help.rar_Help!"显然指向一个关于SQL帮助文档的压缩文件,而"Help!"标签进一步强调了这是为了寻求或提供SQL查询的帮助。压缩包内的文件名称揭示了包含的内容,比如“精妙Sql语句 - 兵临城下.mht”可能...

    LabWindows/CVI SQL Toolkit help

    Software Revision Version: 2.1 Software version corresponds to the version of the application ...This help file describes the LabWindows/CVI SQL Toolkit, which you can use to perform database operations.

    Coding Help Database(sql2005)

    《Coding Help Database(sql2005):编程辅助数据库详解》 在信息技术领域,数据库扮演着至关重要的角色,尤其在编程环境中。"Coding Help Database(sql2005)" 是一个专为编程帮助设计的数据库,它针对的是微软的SQL...

    SQL Tuning sqlServer 数据库

    《SQL Tuning in sqlServer 数据库》是一本专注于优化SQL Server数据库性能的专业教程,以英文的CHM(Compiled HTML Help)格式提供。SQL优化是数据库管理中的关键环节,它直接影响到系统的响应速度和整体性能。以下...

    SQL参考手册 Microsoft® HTML Help Executable

    《SQL参考手册 Microsoft® HTML Help Executable》是一个专门为SQL语言学习者和使用者设计的综合性指导文档,采用Microsoft的HTML Help Executable格式,提供方便的查阅和浏览体验。这个手册包含了SQL语言的基础...

    学习Oracle

    `SAVE`命令用于保存当前会话中的输出结果到文件中,而`@`命令则用于执行存储在文件中的SQL脚本。例如: ```sql save output.txt @my_script.sql ``` **2.2.6 EDIT命令** 该命令用于启动编辑器对SQL语句进行...

    SQL2000 HELP

    "SQL2000 HELP"标题所指,显然是一份关于SQL Server 2000的参考资料,帮助用户在处理数据库复杂编程任务时提供必要的指导。 SQL Server 2000包含了许多核心功能和组件,例如: 1. **Transact-SQL (T-SQL)**:这是...

Global site tag (gtag.js) - Google Analytics