问题描述
我做了一个com+用来连接数据库,服务器端调用COM+,但在运行网页调用COM+时出现下面的错误,(数据库的连接肯定没写错,因为我把这个连接写到网页端时能连接)COM+好象也没错(因为我把连接去掉后返回string、int都不出错,但加上连接后返回就会出错)请各位大侠帮忙看看谢谢!分不是问题不够您说话没有可用的错误信息:XACT_E_TMNOTAVAILABLE(0x8004D01B)。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.Data.OleDb.OleDbException:没有可用的错误信息:XACT_E_TMNOTAVAILABLE(0x8004D01B)。说明:dotnet2005,oracle10g,windows2003.上边的问题是其他会员贴出来的,我的问题类似,总之都是报exception:XACT_E_TMNOTAVAILABLE(0x8004D01B)解决办法:不要使用System.Data.OleDb.OleDbException;而使用Oracleproviderfor.net.方法是:addreference|.net|Oracle.DataAcess,并usingOracle.DataAccess.Client;usingOracle.DataAccess.Server;usingOracle.DataAccess.Types;在程序中如下使用即可:[Transaction(TransactionOption.Required)]publicclassDUser{/*返回所有类别的字符串,以分号隔开*/publicstring[]getUserList(){OracleConnectionconn=newOracleConnection(OraConnection.getConnString());OracleCommandcmd=newOracleCommand("SELECTID,Login_Name,Login_PWD,User_nameFROMOperaterWHERESTATUS=1");OracleDataReaderdr;string[]resultString=newstring[10];/*存返回的类别串*/inti=0;try{cmd.Connection=conn;conn.Open();dr=cmd.ExecuteReader();while(dr.Read()){longID=0;//IDstringloginName=null;//登陆名stringloginPwd=null;//登陆密码stringuserName=null;//名字ID=(long)dr.GetDouble(0);//类别IDloginName=dr.GetString(1);loginPwd=dr.GetString(2);userName=dr.GetString(3);resultString[i++]=loginName;}}catch(Exceptione){}finally{conn.Close();}returnresultString;}/*返回:注册成功;名字存在,注册失败*/publicstringResigter(stringloginName,stringpassword){stringresult=null;OracleConnectionconn=newOracleConnection(OraConnection.getConnString());OracleCommandcmd=newOracleCommand("INSERTINTOoperater(id,login_name,login_pwd)"+"VALUES(q_operator.nextval,'"+loginName+"','"+password+"')");longi=0;try{cmd.Connection=conn;conn.Open();i=cmd.ExecuteNonQuery();if(i>0)result="注册成功";}catch(Exceptione){result="名字存在,注册失败!";}finally{conn.Close();}returnresult;}/*返回:登陆成功或者失败*/publicstringLogin(stringloginName,stringpassword){stringresult=null;OracleConnectionconn=newOracleConnection(OraConnection.getConnString());OracleCommandcmd=newOracleCommand("SELECTCOUNT(id)tFROMoperaterWHERE"+"login_name='"+loginName+"'ANDlogin_pwd='"+password+"'");inti=0;try{cmd.Connection=conn;conn.Open();i=Convert.ToInt32(cmd.ExecuteScalar());result="登陆成功";}catch(OracleExceptionoe){result="数据库错误,用户名或密码错,登陆失败!";}catch(Exceptione){result="应用错误,登陆失败!";}finally{conn.Close();}returnresult;}}/*在这里配置数据库连接串*/[Transaction(TransactionOption.Required)]publicclassOraConnection{publicstaticstringgetConnString(){return"datasource=ORCL2;userid=CI;password=CI";//不使用微软的oledbprovider,有bug;使用oracleproviderfor.net}}大家注意数据库连接串
解决方案
解决方案二:
该回复于2009-06-18 17:30:27被版主删除