X
返回顶部
当前位置: 首页>

【二次开发】有关REVIT二次开发连接MYSQL数据库的问题

发布:sky92archangel 浏览:5007人 分享
发布于:2017-06-10
本帖最后由 sky92archangel 于 2017-6-10 17:58 编辑由于工作原因 , 需要搭建REVIT和MYSQL的工作流 (由于公司没有MSSQL或ACCESS),首先想到就是用二次开发的手段

我所做如下 :

在VS里建立了一个C#类库项目
引用MYSQL官网提供的mysql-connector-net-6.9.9-noinstall.zip内的所有dll
引用RevitAPIUI.dll和RevitAPI.dll


然后开始如下代码:
[code]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using MySql.Data;
using MySql.Data.MySqlClient;

using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System.Windows.Forms; //为了程序中需要使用的可视化messagebox

namespace REVIT_MYSQL_CONNECTOR_TEST
{

//固定格式开始
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.UsingCommandData)]
//固定格式结束

public class REVIT_MYSQL_CONNECTOR_TEST : IExternalCommand
{
void Reading_All_Table()
{

string constr =
"server=192.168.237.141;port=3306;user=sky92;password=revitalization;Database=testd01";
MySqlConnection mycon = new MySqlConnection(constr);

mycon.Open();

string sta = "select * from buyer";//执行一个简单的语句

MySqlCommand comm = new MySqlCommand(sta, mycon);

MySqlDataReader reader = comm.ExecuteReader();//用MySqlDataReader接收执行结果

MessageBox.Show(reader.GetString(0));
mycon.Close();
}

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) //执行函数
{
Document RevitDoc = commandData.Application.ActiveUIDocument.Document; //将当前打开的文件定位到API文件类

Transaction ts = new Transaction(RevitDoc, "MYSQL_CONNECTOR"); // Transaction 事务处理

ts.Start();
Reading_All_Table();
ts.Commit();

return Result.Succeeded;
}
}
}
[/code]
成功生成了dll文件,进入revit2016用附加addin-manager选择运行该dll
出现如下报错:


由于上述代码在纯命令行中成功连接数据库且能准确读出数据,所有我猜测是revit对mysql的兼容性问题,
对此我试过一个权宜之计,将mysql连接的行为单独写一个exe文件,然后revit中再写个插件调用该exe,但这样做始终不地道,而且会降低效率。
最好是能够直接从revit中进行数据库操作,直接形成数据流。
所以上述的问题有人能否解决呢?

BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.chinarevit.com),一起共同探讨学习BIM技术,了解BIM应用!