如何在64位操作系统里让Revit的命令连接Access数据库?

 

在Revit的外部命令里打开一个数据库连接,使用了下面的代码。

public class RevitCommand : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {

      UIApplication app = commandData.Application;
      Document doc = app.ActiveUIDocument.Document;
           
      try
      {
        DataRow dr;
        //连接字符串   
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test\test.mdb;";
        OleDbConnection odcConnection = new OleDbConnection(strConn);
       
        //打开连接对象   
        // 此处无法正常打开
        odcConnection.Open();

        odcConnection.Close();
      }
      catch(Exception ex)
      {
        //提示The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
        TaskDialog.Show("error", ex.Message);
      }   
      return Result.Succeeded ;
    }
}
 

在64位操作系统里却提示:The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine. 或者与此同意思的中文。

使用与上面相同的数据库访问代码,可以在64位操作系统的.NET 的exe中打开数据库连接。下面代码是一个按钮的处理函数。

    private void button1_Click(object sender, EventArgs e)
    {

      try
      {
        //连接字符串   
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test\test.mdb;";
        OleDbConnection odcConnection = new OleDbConnection(strConn);

        //打开连接对象   
        odcConnection.Open();

        odcConnection.Close();
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message,"error" );
      } 
    }
  }

 

如何解决Revit下64位操作系统的数据库连接问题?

 

早期Microsoft没有提供64位数据库引擎,后来才提供了为Office服务的数据库引擎。默认情况下没有安装到64位的操作系统中。在Revit的命令中,访问数据库,需要有与操作系统相配的office数据库引擎类型。你可以在这个页面下载64位的数据库访问引擎

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255

在上面的页面中提到,我们需要使用odbc数据库访问方式来访问数据库。

下面是Revit代码

  [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class RevitCommand : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {

      UIApplication app = commandData.Application;
      Document doc = app.ActiveUIDocument.Document;
            
      try
      {
        //连接字符串    
        string Driver = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\test\test.mdb;";  //

        OdbcConnection odbcConnection = new OdbcConnection();
        odbcConnection.ConnectionString = Driver;

        //打开连接对象    
        odbcConnection.Open();

        odbcConnection.Close();
      }
      catch(Exception ex)
      {
                TaskDialog.Show("error", ex.Message);
      }    
      return Result.Succeeded ;
    }
}


 

 

那为什么在.NET的exe程序却能打开数据库连接呢? 到默认情况下,.NET程序的目标平台是x86, 也就是32位的。32位oledb数据库引擎已经安装到系统中。所以exe中可以顺利打开数据库连接。

 

 

叶雄进  Nov. 21. 2011

Autodesk ADN

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值