很简单的代码:
[Transaction(TransactionOption.Required)]
public class FISCIMPORT : ServicedComponent
{
[AutoComplete()]
public DataSet GetFromSQL(string SQLStatement)
{
OleDbConnection conn = new OleDbConnection(@"Provider=OraOLEDB.Oracle.1;Password=****;Persist Security Info=True;User ID=dwdev;Data Source=suzs022a"); // Attempt to open the database connection:
try
{
conn.Open();
}
catch(Exception ex)
{
conn.Close();
conn.Dispose();
throw new Exception(ex.Message);
}
}
}在conn.Open();就会弹出警告框"This Application has failed to start because MSVCRTD.dll was not found. Re-installing the application may fix this problem" 截获的错误是"No error information available: XACT_E_TMNOTAVAILABLE(0x8004D01B)."
而如果我把驱动改成"Provider=MSDAORA.1"则不会报以上的错误。但在conn打开时依然会显示0x8004D01B错误.我已经重新安装过oracle 的客户端了.实在不解到底是什么原因.而且我在添加引用时发现也无法找到oracle.dataaccess.dll
[Transaction(TransactionOption.Required)]
public class FISCIMPORT : ServicedComponent
{
[AutoComplete()]
public DataSet GetFromSQL(string SQLStatement)
{
OleDbConnection conn = new OleDbConnection(@"Provider=OraOLEDB.Oracle.1;Password=****;Persist Security Info=True;User ID=dwdev;Data Source=suzs022a"); // Attempt to open the database connection:
try
{
conn.Open();
}
catch(Exception ex)
{
conn.Close();
conn.Dispose();
throw new Exception(ex.Message);
}
}
}在conn.Open();就会弹出警告框"This Application has failed to start because MSVCRTD.dll was not found. Re-installing the application may fix this problem" 截获的错误是"No error information available: XACT_E_TMNOTAVAILABLE(0x8004D01B)."
而如果我把驱动改成"Provider=MSDAORA.1"则不会报以上的错误。但在conn打开时依然会显示0x8004D01B错误.我已经重新安装过oracle 的客户端了.实在不解到底是什么原因.而且我在添加引用时发现也无法找到oracle.dataaccess.dll
http://community.csdn.net/Expert/TopicView.asp?id=4452868
http://community.csdn.net/Expert/TopicView.asp?id=4448243
如果 Web 服务的某个 Web 方法标记为需要事务,而且该 Web 方法要访问 Oracle,则您可能会收到下列错误信息:
XACT_E_TMNOTAVAILABLE(0x8004D01B) 原因:
当 Microsoft Oracle OLE DB Provider登记事务时,该 Provider 必须访问下列注册表项:
HKLM\SOFTWARE\Microsoft\MSDTC\MTxOCI(Windows 2000 或 Windows XP)
HKLM\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer(Windows NT 4.0)运行 Web 服务的用户对于这些注册表项没有访问权限,从而对于安装 Oracle 的目录没有足够权限。 解决方案:
若要解决此问题,请确保运行该 Web 服务的用户对于这些注册表项具有访问权限并且能够访问安装 Oracle 的目录。默认情况下,Web 服务作为 ASPNET 用户运行。
to: wmt85(深山老翁:我已经把注册表中能加权限的都加了。还是不行啊。
修改你的注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
"OracleXaLib"="oraclient9.dll"
"OracleSqlLib"="orasql9.dll"
"OracleOciLib"="oci.dll"
如果是Windows 2003或者Windows XP2,还需要建立:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL
然后添加名字为:
mtxoci.dll的字符串键,内容为:
C:\WINDOWS\SYSTEM32\MTXOCI.DLL
还是没有用,FISCIMPORT 如果不继承自ServicedComponent就是对的。如果继承了就会报错?
是不是com+本身的问题?
当时解决时发现
主要是ORCALE版本的问题
你可上网找一下具体的版本号,和相关的补丁