首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

征求各位用的SqlHelper、AccessHelper、MySqlHelper、OracleHelper、XMLHelper、FileHelper。解决方案

2012-03-12 
征求各位用的SqlHelper、AccessHelper、MySqlHelper、OracleHelper、XMLHelper、FileHelper。如题。想把他们集成

征求各位用的SqlHelper、AccessHelper、MySqlHelper、OracleHelper、XMLHelper、FileHelper。
如题。
想把他们集成起来,另外欢迎各位在上面扩展范型数据集合的返回和缓存功能的加入。
分不够再加。

[解决办法]
这是我(海关)项目中常用到的一个SqlHelper类,里面用到的数据集序列化,连接池的优化,缓存等技术...........

好像大了点,

C# code
using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Transactions;namespace ChinaCustoms.Application.HD2007.DB{    /// <summary>    /// 数据库操作类.    /// </summary>    /// <remarks>    /// 密封类,以防止被继承.    /// 该类中所有成员均为static.    /// </remarks>    public sealed class SqlDatabase    {        /// <summary>        /// 私有构造函数,以防止该类的实例化.        /// </summary>        private SqlDatabase() { }        /// <summary>        /// 获取数据库连接对象        /// </summary>        /// <param name="connectionString">数据库连接字符串</param>        /// <returns>IDbConnection对象</returns>        public static IDbConnection GetConnectionObject(string connectionString)        {            return new SqlConnection(connectionString);//不一定new一个新的SqlConnection,可能会去连接池取.        }        #region ExecuteNonQuery        /// <summary>        /// 该方法可用以执行不需要输入参数的sql语句、存储过程.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.sql语句        /// 对于insert、update、delete语句,将返回命令所影响的行数.        /// 对于select等所有其他类型的语句,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 2.存储过程        /// 同上        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="commandType">命令类型,为System.Data.CommandType枚举类型.</param>        /// <param name="commandText">命令</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, CommandType commandType, string commandText)        {            return ExecuteNonQuery(connectionObject, commandType, commandText, null);        }        /// <summary>        /// 该方法可用以执行不需要输入参数的sql语句、存储过程.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.sql语句        /// 对于insert、update、delete语句,将返回命令所影响的行数.        /// 对于select等所有其他类型的语句,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 2.存储过程        /// 同上        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="commandType">命令类型,为System.Data.CommandType枚举类型.</param>        /// <param name="commandText">命令</param>        /// <param name="commandTimeout">在终止执行命令的尝试并生成错误之前的等待时间.</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, CommandType commandType, string commandText, int commandTimeout)        {            return ExecuteNonQuery(connectionObject, commandType, commandText, commandTimeout, null);        }        /// <summary>        /// 该方法可用以执行需要输入参数的sql语句、存储过程.        /// 通过该方法可得到命令的输出参数、@RETURN_VALUE.这些值通过方法的输入参数ParamCollection返回.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.sql语句        /// 对于insert、update、delete语句,将返回命令所影响的行数.        /// 对于select等所有其他类型的语句,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 2.存储过程        /// 同上        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询        /// 2.需要返回命令的输出参数、@RETURN_VALUE的时候        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="commandType">命令类型,为System.Data.CommandType枚举类型.</param>        /// <param name="commandText">命令</param>        /// <param name="commandTimeout">在终止执行命令的尝试并生成错误之前的等待时间.</param>        /// <param name="commandParameters">命令的参数,为ParamCollection类型,最终会被解析为SqlParameter类.</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, CommandType commandType, string commandText, int commandTimeout, ParamCollection commandParameters)        {            if (string.IsNullOrEmpty(commandText)) throw new ArgumentNullException("commandText");            //如果是字符串的话            if (connectionObject is string)            {                using (SqlConnection connection = new SqlConnection((string)connectionObject))                {                    return ExecuteNonQuery(connection, commandType, commandText, commandTimeout, commandParameters);                }            }            else//如果是connection对象的话            {                return ExecuteNonQuery((SqlConnection)connectionObject, commandType, commandText, commandTimeout, commandParameters);            }        }        /// <summary>        /// 该方法可用以执行需要输入参数的sql语句、存储过程.        /// 通过该方法可得到命令的输出参数、@RETURN_VALUE.这些值通过方法的输入参数ParamCollection返回.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.sql语句        /// 对于insert、update、delete语句,将返回命令所影响的行数.        /// 对于select等所有其他类型的语句,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 2.存储过程        /// 同上        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询        /// 2.需要返回命令的输出参数、@RETURN_VALUE的时候        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="commandType">命令类型,为System.Data.CommandType枚举类型.</param>        /// <param name="commandText">命令</param>        /// <param name="commandParameters">命令的参数,为ParamCollection类型,最终会被解析为SqlParameter类.</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, CommandType commandType, string commandText, ParamCollection commandParameters)        {            //CommandTimeout默认为30秒.            return ExecuteNonQuery(connectionObject, commandType, commandText, 30, commandParameters);        }        /// <summary>        /// 该方法仅用以执行不需要输入参数的存储过程.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.存储过程        /// 对于insert、update、delete类型的存储过程,将返回命令所影响的行数.        /// 对于select等所有其他类型的存储过程,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询类型的存储过程        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="spName">存储过程名称</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, string spName)        {            return ExecuteNonQuery(connectionObject, spName, null);        } 


[解决办法]

C# code
       /// <summary>        /// 该方法仅用以执行不需要输入参数的存储过程.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.存储过程        /// 对于insert、update、delete类型的存储过程,将返回命令所影响的行数.        /// 对于select等所有其他类型的存储过程,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询类型的存储过程        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="spName">存储过程名称</param>        /// <param name="commandTimeout">在终止执行命令的尝试并生成错误之前的等待时间.</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, string spName, int commandTimeout)        {            return ExecuteNonQuery(connectionObject, spName, commandTimeout, null);        }        /// <summary>        /// 该方法仅用以执行需要输入参数的存储过程.        /// 调用时只传入输入参数的值即可.程序会自动检索出该存储过程的参数,并分配相应的参数值.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.存储过程        /// 对于insert、update、delete类型的存储过程,将返回命令所影响的行数.        /// 对于select等所有其他类型的存储过程,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询类型的存储过程        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="spName">存储过程名称</param>        /// <param name="commandTimeout">在终止执行命令的尝试并生成错误之前的等待时间.</param>        /// <param name="parameterValues">存储过程输入参数的值,为参数数组形式</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, string spName, int commandTimeout, params object[] parameterValues)        {            if (string.IsNullOrEmpty(spName)) throw new ArgumentNullException("spName");            if (parameterValues != null)            {                #region 为sp准备ParamCollection                //获取缓存的sp参数的deep copy                ParamCollection commandParameters = ParamCache.GetSpParameterSet(connectionObject, spName);                //为参数赋值                AssignParameterValues(commandParameters, parameterValues);                #endregion                return ExecuteNonQuery(connectionObject, CommandType.StoredProcedure, spName, commandTimeout, commandParameters);            }            else            {                return ExecuteNonQuery(connectionObject, CommandType.StoredProcedure, spName, commandTimeout);            }        }        /// <summary>        /// 该方法仅用以执行需要输入参数的存储过程.        /// 调用时只传入输入参数的值即可.程序会自动检索出该存储过程的参数,并分配相应的参数值.        /// </summary>        /// <remarks>        /// 关于该方法的返回值:        /// 1.存储过程        /// 对于insert、update、delete类型的存储过程,将返回命令所影响的行数.        /// 对于select等所有其他类型的存储过程,将返回-1.        /// 如果发生会滚,也将返回-1.        /// 该方法的推荐应用场景:        /// 1.用于执行非select查询类型的存储过程        /// </remarks>        /// <param name="connectionObject">用于数据库连接的字符串或者直接是连接对象.</param>        /// <param name="spName">存储过程名称</param>        /// <param name="parameterValues">存储过程输入参数的值,为参数数组形式</param>        /// <returns>受影响的行数</returns>        public static int ExecuteNonQuery(object connectionObject, string spName, params object[] parameterValues)        {            //CommandTimeout默认为30秒.            return ExecuteNonQuery(connectionObject, spName, 30, parameterValues);        }        #endregion
[解决办法]
ilist转DataSet,增加对Nullable的支持,昨天没事刚搞的
只是稍微试了一下没发现BUG:D
C# code
/// <summary>        /// IList转DataSet,IList.Count=0的话返回null        /// </summary>        /// <typeparam name="T">数据名</typeparam>        /// <param name="list"></param>        /// <returns>DataSet</returns>        public static DataSet ConvertToDataSet<T>(IList<T> list)        {            if (list == null || list.Count <= 0)                return null;            DataSet ds = new DataSet();            DataTable dt = new DataTable(typeof(T).Name);            DataColumn column;            DataRow row;            System.Reflection.PropertyInfo[] myPropertyInfo =                typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);            foreach (T t in list)            {                if (t == null) continue;                row = dt.NewRow();                for (int i = 0, j = myPropertyInfo.Length; i < j; i++)                {                    System.Reflection.PropertyInfo pi = myPropertyInfo[i];                    String name = pi.Name;                                        if (dt.Columns[name] == null)                    {                        if (pi.PropertyType.UnderlyingSystemType.ToString() == "System.Nullable`1[System.Int32]")                        {                            column = new DataColumn(name,typeof(Int32));                            dt.Columns.Add(column);                            //row[name] = pi.GetValue(t, new object[] {i});//PropertyInfo.GetValue(object,object[])                            if (pi.GetValue(t, null) != null)                                row[name] = pi.GetValue(t, null);                            else                                row[name] = System.DBNull.Value;                        }                        else                        {                            column = new DataColumn(name, pi.PropertyType);                            dt.Columns.Add(column);                            row[name] = pi.GetValue(t, null);                        }                    }                }                dt.Rows.Add(row);            }            ds.Tables.Add(dt);            return ds;        } 


[解决办法]
http://www.svnhost.cn这里也有很多

热点排行