很简单的代码:
[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

解决方案 »

  1.   

    其他两个帖子的连结。
    http://community.csdn.net/Expert/TopicView.asp?id=4452868
    http://community.csdn.net/Expert/TopicView.asp?id=4448243
      

  2.   

    数据库连接绝对正确。以上的代码,我只要不添加Transaction和AutoComplete 的自定义属性就完全没有问题。服务中的DTC也启动了。
      

  3.   

    oracle92 得装补丁的.吃饭了...      :)
      

  4.   

    和oracle 版本应该没关系。有台服务器上跑了类似的代码,就没有这个问题。和我的ORACLE版本一样。
      

  5.   

    MSVCRTD.dll 是vc6中一个debug版类库,release版就不需要了阿。怎么会有这种提示,还真没遇到过。你复制一个MSVCRTD.dll 文件到system32下试试看,还有没有其他提示。
      

  6.   

    system32下本来就是有MSVCRTD.dll 文件的阿
      

  7.   

    症状:
    如果 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 用户运行。
      

  8.   

    设置访问安装 Oracle 的目录有足够权限应该能解决,我遇到过类似的问题,不过错误信息跟你不一样,我没有用COM+,原因是访问权限的问题,后来改一下访问权限就得了!
      

  9.   

    to: wmt85(深山老翁 你是说oracle的安装目录吗?我已经把ASPNET加到ADMINISTRATORS组中了。应该不是这个原因啊。
      

  10.   

    这也是我想知道的阿
    to: wmt85(深山老翁:我已经把注册表中能加权限的都加了。还是不行啊。
      

  11.   

    这个问题很可能是和你调试机器上安装的oracle客户端有关。
    修改你的注册表
    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
      

  12.   

    to  lzj3000(一笑) :
    还是没有用,FISCIMPORT 如果不继承自ServicedComponent就是对的。如果继承了就会报错?
    是不是com+本身的问题?
      

  13.   

    曾经遇到这个问题
    当时解决时发现
    主要是ORCALE版本的问题
      

  14.   

    ORCALE和DB2对微软COM+的支持是在某个较新的版本号以后
    你可上网找一下具体的版本号,和相关的补丁