huchao0911 发表于 2008-4-25 15:16

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

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++)
                                {
                                        OleCmd.CommandText = strSql[i] ;
                                        if(OleCmd.ExecuteNonQuery() < 0)
                                        {
                                                OleCmd.Transaction.Rollback() ;
                                                return false ;
                                        }
                                }
                                OleCmd.Transaction.Commit() ;
                                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() ;
                        }
                }
        }
}

huchao0911 发表于 2008-4-25 15:21

public bool ExecSql(string strSql) 这个方法有点异常,在OleConnString.Open();和if( OleCmd.ExecuteNonQuery() > 0)有异常,帮忙看看 急!!!!

chenny333 发表于 2008-4-25 15:27

异常详情?

huchao0911 发表于 2008-4-25 15:33

OleConnString.Open(); 有下面两个异常
//System.InvalidOperationException;
//System.Data.OleDb.OleDbException;
if( OleCmd.ExecuteNonQuery() > 0):异常是//System.InvalidOperationException

huchao0911 发表于 2008-4-25 15:34

高手帮忙看看

chenny333 发表于 2008-4-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();

chenny333 发表于 2008-4-25 15:41

public OleDbConnection GetConnect()
最好用void
本类操作不需要返回

huchao0911 发表于 2008-4-25 16:00

没用啊 ,还是一样的 ,晕倒啊

huchao0911 发表于 2008-4-25 16:01

[tk05] 苦恼啊

chenny333 发表于 2008-4-25 16:19

你断点设置看下异常catch到的是什么内容~还有你oledb操作的是什么?execl?

huchao0911 发表于 2008-4-25 16:28

回复 10# 的帖子

光标点到OleConnString.Open();这个方法时时就有 下面两个异常

//System.InvalidOperationException;
//System.Data.OleDb.OleDbException;
if( OleCmd.ExecuteNonQuery() > 0):也是一样
异常是//System.InvalidOperationException

huchao0911 发表于 2008-4-25 16:32

SQL2000数据库

chenny333 发表于 2008-4-25 16:46

sql2000为何不用system.data.sqlclient命名空间啊

huchao0911 发表于 2008-4-26 22:39

回复 13# 的帖子

因为我的参考书上是用OLEDB其实我自己也觉得SQLCLIENT舒服些

冰彩虹 发表于 2008-4-27 11:14

构造OleConnString对象的时候你没有提供CommandText就直接来了个Open(),不行的

huchao0911 发表于 2008-4-27 22:14

回复 15# 的帖子

呀,是真的不,你肯定不,OPEN前就要提供?,但是我在调用这个类的时候,比如像public bool ExecSql(string strSql)函数时,有时是成功的,但有时又报错,

huchao0911 发表于 2008-4-28 16:15

结贴咯,这个类没做错,是我自己多心咯,哈哈,还是要好好学习啊

页: [1]

编程论坛