注册 登录
编程论坛 ASP.NET技术论坛

自己写的一个数据类,有异常,大家指点

huchao0911 发布于 2008-04-25 15:16, 1756 次点击
using System;
using System.Data ;
using System.Data.OleDb ;

namespace EIP.SQLconn
{
    public class DataAccess
    {
        private OleDbConnection OleConnString ;
        private OleDbTransaction trans ;
        /******************************************************************************
         * FunName    :    ExecSqlInTrans
         * Input    :    strSqls
         * Return    :    bool
         * Describe    :    
         *        This function is to execute a set of sql strings splitted by ";", such as
         * "insert into acl values('admin','UserMng');insert into acl values('Jason','LogMng')" ;
         *
         * In the example as up, the function can execute two sql strings in one transaction. when
         * one sql string executing is failure, the two executing will both rollback to the old
         * state.
         *
         * ****************************************************************************/
        public bool ExecSqlInTrans(string strSqls)
        {
            OleConnString = GetConnect() ;
            OleDbCommand OleCmd = new OleDbCommand("",OleConnString) ;
            OleConnString.Open() ;
            trans = OleConnString.BeginTransaction() ;
            OleCmd.Transaction = trans ;
            try
            {
                int i = 0 ;
                string[] strSql = strSqls.Split(';') ;
                for(i=0;i<strSql.Length;i++)
                {
                     = strSql[i] ;
                    if(OleCmd.ExecuteNonQuery() < 0)
                    {
                        OleCmd.Transaction.Rollback() ;
                        return false ;
                    }
                }
                OleCmd.() ;
                return true ;
            }
            catch
            {
                OleCmd.Transaction.Rollback() ;
                return false ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    GetConnect
         * Input    :
         * Return    :    OleDbConnection
         * Describe    :    
         *        Create the database connection and return OleDbConnection.
         *
         * ****************************************************************************/
        public OleDbConnection GetConnect()
        {
            string strOleSqlConn = System.Configuration.ConfigurationSettings.AppSettings["Connection"] ;
            OleConnString = new OleDbConnection(strOleSqlConn) ;
            return OleConnString ;
        }
        /******************************************************************************
         * FunName    :    GetDataReader
         * Input    :    strSql
         * Return    :    OleDbDataReader
         * Describe    :    
         *        Execute the query and return OleDbDataReader.
         *
         * ****************************************************************************/
        public OleDbDataReader GetDataReader(string strSql)
        {
            OleConnString = GetConnect() ;
            OleConnString.Open() ;
            try
            {
                OleDbCommand OleCmd = new OleDbCommand(strSql,OleConnString) ;
                OleDbDataReader OleDr = OleCmd.ExecuteReader() ;
                return OleDr ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    GetDataSet
         * Input    :    strSql
         * Return    :    DataSet
         * Describe    :    
         *        Execute the query and return DataSet.
         *
         * ****************************************************************************/
        public DataSet GetDataSet(string strSql)
        {
            OleConnString = GetConnect() ;
            OleConnString.Open() ;
            try
            {
                DataSet OleDs = new DataSet() ;
                OleDbDataAdapter OleDa = new OleDbDataAdapter(strSql,OleConnString) ;
                OleDa.Fill(OleDs) ;
                return OleDs ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    CreateDataView
         * Input    :    strSql
         * Return    :    DataView
         * Describe    :    
         *        Execute the query and return DataView.
         *
         * ****************************************************************************/
        public DataView CreateDataView(string strSql)
        {
            OleConnString = GetConnect() ;
            OleConnString.Open() ;
            try
            {
                DataSet DS = new DataSet() ;
                OleDbDataAdapter OleDa = new OleDbDataAdapter(strSql,OleConnString) ;
                OleDa.Fill(DS) ;
                DataView DV = new DataView() ;
                DV.Table = DS.Tables[0] ;
                return DV ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    CreateDataTable
         * Input    :    strSql
         * Return    :    CreateDataTable
         * Describe    :    
         *        Execute the query and return CreateDataTable.
         *
         * ****************************************************************************/
        public DataTable CreateDataTable(string strSql)
        {
            OleConnString = GetConnect() ;
            OleConnString.Open() ;
            try
            {
                DataSet DS = new DataSet() ;
                OleDbDataAdapter OleDa = new OleDbDataAdapter(strSql,OleConnString) ;
                OleDa.Fill(DS) ;
                DataTable DT = new DataTable() ;
                DT = DS.Tables[0] ;
                return DT ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    ExecSql
         * Input    :    strSql
         * Return    :    bool
         *    if ture, successful;if false, failure
         * Describe    :    
         *        Execute the query.
         *
         * ****************************************************************************/
        public bool ExecSql(string strSql)
        {
            OleConnString = GetConnect() ;
            OleConnString.Open();
            OleDbCommand OleCmd = new OleDbCommand(strSql,OleConnString) ;
            
            try
            {
                if( OleCmd.ExecuteNonQuery() > 0)
                {
                    return true ;
                }
                else
                {
                    return false ;
                }
            }
            catch
            {
                return false ;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
        /******************************************************************************
         * FunName    :    GetIntFromDataReader
         * Input    :    strSql
         * Return    :    int
         * Describe    :    
         *        Execute the query and return int.
         *
         * ****************************************************************************/
        public int GetIntFromDataReader(string strSql)
        {
//            string sql="";
//            sql="select count(*) from BBS";            
//            EIP.SQLconn.DataAccess DataAs = new EIP.SQLconn.DataAccess();
            OleConnString = GetConnect() ;
            OleConnString.Open() ;
            try
            {
                OleDbCommand OleCmd = new OleDbCommand(strSql,OleConnString) ;
                OleDbDataReader OleDr = OleCmd.ExecuteReader() ;
                OleDr.Read();
                int i = OleDr.GetInt32(0);
                OleDr.Close();
                return i;
            }
            finally
            {
                OleConnString.Close() ;
            }
        }
    }
}
16 回复
#2
huchao09112008-04-25 15:21
public bool ExecSql(string strSql) 这个方法有点异常,在OleConnString.Open();和if( OleCmd.ExecuteNonQuery() > 0)有异常,帮忙看看 急!!!!
#3
chenny3332008-04-25 15:27
异常详情?
#4
huchao09112008-04-25 15:33
OleConnString.Open(); 有下面两个异常
//System.InvalidOperationException;
//System.Data.OleDb.OleDbException;
if( OleCmd.ExecuteNonQuery() > 0):异常是//System.InvalidOperationException
#5
huchao09112008-04-25 15:34
高手帮忙看看
#6
chenny3332008-04-25 15:39
public OleDbConnection GetConnect()
        {
            string strOleSqlConn = System.Configuration.ConfigurationSettings.AppSettings["Connection"] ;
            if (OleConnString == null)
            {
                OleConnString = new OleDbConnection(strOleSqlConn);
            }
            OleConnString = new OleDbConnection(strOleSqlConn) ;
            return OleConnString ;
        }

open这里判断下
if (OleConnString .State == System.Data.ConnectionState.Closed)
                OleConnString .Open();
#7
chenny3332008-04-25 15:41
public OleDbConnection GetConnect()
最好用void
本类操作不需要返回
#8
huchao09112008-04-25 16:00
没用啊 ,还是一样的 ,晕倒啊
#9
huchao09112008-04-25 16:01
苦恼啊
#10
chenny3332008-04-25 16:19
你断点设置看下异常catch到的是什么内容~还有你oledb操作的是什么?execl?
#11
huchao09112008-04-25 16:28
回复 10# 的帖子
光标点到OleConnString.Open();这个方法时时就有 下面两个异常

//System.InvalidOperationException;
//System.Data.OleDb.OleDbException;
if( OleCmd.ExecuteNonQuery() > 0):也是一样
异常是//System.InvalidOperationException
#12
huchao09112008-04-25 16:32
SQL2000数据库
#13
chenny3332008-04-25 16:46
sql2000为何不用system.data.sqlclient命名空间啊
#14
huchao09112008-04-26 22:39
回复 13# 的帖子
因为我的参考书上是用OLEDB其实我自己也觉得SQLCLIENT舒服些
#15
冰彩虹2008-04-27 11:14
构造OleConnString对象的时候你没有提供CommandText就直接来了个Open(),不行的
#16
huchao09112008-04-27 22:14
回复 15# 的帖子
呀,是真的不,你肯定不,OPEN前就要提供?,但是我在调用这个类的时候,比如像public bool ExecSql(string strSql)函数时,有时是成功的,但有时又报错,
#17
huchao09112008-04-28 16:15
结贴咯,这个类没做错,是我自己多心咯,哈哈,还是要好好学习啊
1