最早写的是静态的类,因为别人说过存在并发的问题,所以改成动态的,然后又看了一些资料 
还是决定用静态的类和方法,想请大家帮我看看这个类,有什么问题,还有 
那些可以写的更好,也请大家帮我改一下!特别是并发问题! 小弟先在此谢谢各位了! 代码如下: 
using System; 
using System.Data; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Collections; namespace DbHelper 

    /// <summary> 
    /// DBHELPER 的摘要说明 
    /// </summary> 
    public static class DBHELPER 
    { 
        private static readonly string con = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString;         public static SqlParameter GetParam(String ParamName, SqlDbType type, object value) 
        { 
            SqlParameter param = new SqlParameter(ParamName, type); 
            param.Value = value; 
            return param; 
        } 
        public static int ExecSql(string sql, SqlParameter[] param,CommandType ct) 
        { 
            SqlCommand cmd = new SqlCommand(); 
            using (SqlConnection conn = new SqlConnection(con)) 
            { 
                getcmd(cmd, conn, ct, sql, param); 
                int a = cmd.ExecuteNonQuery(); 
                cmd.Parameters.Clear(); 
                return a; 
            } 
        } 
        public static SqlDataReader GetReader(string sql, SqlParameter[] param, CommandType ct) 
        { 
            SqlConnection conn = new SqlConnection(con); 
            SqlCommand cmd = new SqlCommand(); 
            getcmd(cmd, conn, ct, sql, param); 
            SqlDataReader sdr; 
            try 
            { 
                sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);             } 
            catch 
            { 
                conn.Close(); 
                throw; 
            } 
            finally 
            { 
                cmd.Parameters.Clear(); 
            } 
            return sdr; 
        } 
        public static object GetScalar(string sql, SqlParameter[] param, CommandType ct) 
        { 
            SqlCommand cmd = new SqlCommand(); 
            using (SqlConnection conn = new SqlConnection(con)) 
            { 
                getcmd(cmd, conn, ct, sql, param); 
                object a = cmd.ExecuteScalar(); 
                cmd.Parameters.Clear(); 
                return a; 
            }           
        } 
        public static DataTable GetTable(string sql, SqlParameter[] param, CommandType ct) 
        { 
            SqlCommand cmd = new SqlCommand(); 
            using (SqlConnection conn = new SqlConnection(con)) 
            { 
                getcmd(cmd, conn, ct, sql, param); 
                SqlDataAdapter sda = new SqlDataAdapter(cmd); 
                DataSet ds = new DataSet(); 
                sda.Fill(ds, "t1"); 
                cmd.Parameters.Clear(); 
                return ds.Tables["t1"]; 
            } 
                
        } 
        public static SqlParameter GetP(string paname, SqlDbType st) 
        { 
            SqlParameter sp = new SqlParameter(paname, st); 
            sp.Direction = ParameterDirection.ReturnValue; 
            return sp; 
        } 
        private static void getcmd(SqlCommand cmd, SqlConnection conn, CommandType cmdType, string sql, SqlParameter[] param) 
        {             if (conn.State != ConnectionState.Open) 
                conn.Open();             cmd.Connection = conn; 
            cmd.CommandText = sql; 
            cmd.CommandType = cmdType;             if (param != null) 
            { 
                cmd.Parameters.AddRange(param); 
            } 
        } 
    } 

解决方案 »

  1.   

    sqlhelper没简化多少东西,不喜欢用在参数里有sqlparameter的方法
      

  2.   

    sqlhelper没简化多少东西至少不用你去写建立dataset或者dataReader了自己写,还不如用微软写的。如果练练手可以,我觉得微软写的怎么也比咱们考虑的多
      

  3.   

     public abstract class DBOperator
        {
            public abstract void BeginTrans();
            public abstract void Close();
            public abstract void CommitTrans();
            public abstract string Convert2Date(string strDate);
            public abstract DataSet ExecuteDataSet(string strSql);
            public abstract DataSet ExecuteDataSet(CommandType cmdType, string cmdText, string[] parmsName, object[] parmsValue);
            public abstract void ExecuteNonQuery(IList<string> arrSql);
            public abstract void ExecuteNonQuery(CommandType cmdType, string cmdText, string[] parmsName, object[] parmsValue);
            public abstract void ExecuteNonQuery(CommandType cmdType, string cmdText, string[] parmsName, ref object[] parmsValue, object[] parmsDirection);
            public abstract IDataReader ExecuteReader(string strSql);
            public abstract IDataReader ExecuteReader(CommandType cmdType, string cmdText, string[] parmsName, object[] parmsValue);
            public abstract object ExecuteScalar(string strSql);
            public abstract object ExecuteScalar(CommandType cmdType, string cmdText, string[] parmsName, object[] parmsValue);
            public abstract string GetCurrSysDate();
            public abstract string GetCurrSysTime();
            public abstract IDbDataAdapter GetDataAdapter(string strSql);
            public abstract IDbDataAdapter GetDataAdapter(CommandType cmdType, string cmdText, string[] parmsName, object[] parmsValue);
            public abstract void Open(string strConn);
            public abstract DataSet PopulateDataSet(IDbDataAdapter ida, string strTableName);
            public abstract void RollbackTrans();
            public abstract void UpdateByAdapter(IDbDataAdapter ida, DataSet ds, string strTableName);
        }
        public enum DBOperatorType
        {
            Cursor
        }
      

  4.   

    练习一下写代码还可以,如果应用于项目...
    毕竟如nhibernate,ibatisNet都已经包含了参考FortuneBase
    http://www.cnblogs.com/mail-ricklee
      

  5.   

    用工厂模式实现数据访问层:
    http://hi.baidu.com/isloveok/blog/item/44dd4f2dddbaed37359bf77c.html
      

  6.   

    我觉得吧!写这一句就够了private static readonly string con = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString; 
    存在并发的问题可以在DAL里面用sqldataadpter填充datatable,然后循环datatable添加到泛型集合,我觉得这样方便写。我这样做过没的问题,不知道楼主觉得可行不?
      

  7.   

    conn你怎么不销毁? depose方法没用?
      

  8.   

    自己转换成c#,贴这不会给公司里人google到吧<Serializable()> Public Class SQLHelper
        Public Enum DataType
            VarChar
            NVarChar
            DateTime
            Int
            SmallInt
            VarBinary
            Bool
            Money
            BigInt
            Text
            CharFixed
            Dec
        End Enum    Private Enum ConnectionType
            SQL
            OleDb
            ODBC
        End Enum    Public Shared Function MaakCommand(ByVal command As String, ByRef con As IDbConnection, ByVal commandType As CommandType) As IDbCommand
            'Maak Command op basis van connectie. Het type connectie is bepalend
            'voor het type command wat geretourneerd wordt
            Try
                If TypeOf con Is System.Data.SqlClient.SqlConnection Then
                    Dim cmd As SqlClient.SqlCommand
                    cmd = New SqlClient.SqlCommand(command, con)
                    cmd.CommandType = commandType
                    Return cmd
                ElseIf TypeOf con Is System.Data.OleDb.OleDbConnection Then
                    Dim cmd As OleDb.OleDbCommand
                    cmd = New OleDb.OleDbCommand(command, con)
                    cmd.CommandType = commandType
                    Return cmd
                ElseIf TypeOf con Is Odbc.OdbcConnection Then
                    Dim cmd As Odbc.OdbcCommand
                    cmd = New Odbc.OdbcCommand(command, con)
                    cmd.CommandType = commandType
                    Return cmd
                Else
                    Return Nothing
                End If
            Catch exc As Exception
                Throw New Exception("Error in MaakCommand", exc)
            End Try
        End Function    Public Shared Function MaakParameter(ByRef command As IDbCommand, ByVal name As String, ByVal type As DataType, ByVal direction As ParameterDirection) As IDataParameter
            Try
                If TypeOf command Is System.Data.SqlClient.SqlCommand Then
                    Dim parameter As SqlClient.SqlParameter
                    parameter = New SqlClient.SqlParameter
                    parameter.ParameterName = name
                    parameter.Direction = direction
                    parameter.SqlDbType = ConverteerDbType(ConnectionType.SQL, type)
                    command.Parameters.Add(parameter)
                    Return parameter
                ElseIf TypeOf command Is System.Data.OleDb.OleDbCommand Then
                    Dim parameter As OleDb.OleDbParameter
                    parameter = New OleDb.OleDbParameter
                    parameter.ParameterName = name
                    parameter.Direction = direction
                    parameter.DbType = ConverteerDbType(ConnectionType.OleDb, type)
                    command.Parameters.Add(parameter)
                    Return parameter
                ElseIf TypeOf command Is Odbc.OdbcCommand Then
                    Dim parameter As Odbc.OdbcParameter
                    parameter = New Odbc.OdbcParameter
                    parameter.ParameterName = name
                    parameter.Direction = direction
                    parameter.OdbcType = ConverteerDbType(ConnectionType.ODBC, type)
                    command.Parameters.Add(parameter)
                    Return parameter
                Else
                    Return Nothing
                End If
            Catch exc As Exception
                Throw New Exception("Error in MaakParameter", exc)
            End Try
        End Function    Public Shared Function MaakParameter(ByRef command As IDbCommand, ByVal name As String, ByVal type As DataType, ByVal direction As ParameterDirection, ByVal size As Integer) As IDataParameter
            Try
                If TypeOf command Is System.Data.SqlClient.SqlCommand Then
                    Dim parameter As SqlClient.SqlParameter
                    parameter = MaakParameter(command, name, type, direction)
                    parameter.Size = size
                    Return parameter
                ElseIf TypeOf command Is System.Data.OleDb.OleDbCommand Then
                    Dim parameter As OleDb.OleDbParameter
                    parameter = MaakParameter(command, name, type, direction)
                    parameter.Size = size
                    Return parameter
                ElseIf TypeOf command Is Odbc.OdbcCommand Then
                    Dim parameter As Odbc.OdbcParameter
                    parameter = MaakParameter(command, name, type, direction)
                    parameter.Size = size
                    Return parameter
                Else
                    Return Nothing
                End If
            Catch exc As Exception
                Throw New Exception("Error in MaakParameter", exc)
            End Try
        End Function  
      

  9.   

    Does any one of you have "NickLee.Extensions.RadScheduler.dll"