成金鳳 談景堯
(天津開(kāi)發(fā)區(qū)海寧船舶工程技術(shù)有限公司,天津 300457)
淺談?dòng)肰B.NET實(shí)現(xiàn)AutoCAD和DB2數(shù)據(jù)庫(kù)的連接
成金鳳 談景堯
(天津開(kāi)發(fā)區(qū)海寧船舶工程技術(shù)有限公司,天津 300457)
長(zhǎng)期應(yīng)用Autocad進(jìn)行設(shè)計(jì)工作的人員經(jīng)常需要對(duì)設(shè)計(jì)圖紙中桿件進(jìn)行匯總分析,而將這些桿件用Autocad繪制成圖塊,再將圖塊的屬性值輸入到數(shù)據(jù)庫(kù)后進(jìn)行匯總、分析,將會(huì)大大節(jié)省設(shè)計(jì)人員的設(shè)計(jì)時(shí)間,提高工作效率和工作質(zhì)量。本文主要討論的是如何用VB.NET開(kāi)發(fā)AutoCAD和DB2數(shù)據(jù)庫(kù),實(shí)現(xiàn)AutoCAD和DB2數(shù)據(jù)庫(kù)的連接。
Autocad VB.NET DB2數(shù)據(jù)庫(kù)
眾所周知,對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā)用到的主要工具有ObjectARX、VBA和LISP,但它們的優(yōu)缺點(diǎn)也是顯而易見(jiàn)的:ObjectARX功能強(qiáng)大,編程效率高,但對(duì)于編程者必須掌握VC++,而這門語(yǔ)言非常難學(xué);VBA和LISP語(yǔ)言雖然簡(jiǎn)單易于上手,但他們對(duì)開(kāi)發(fā)大型的程序好像無(wú)能為力,而.NET則結(jié)合了VC++功能強(qiáng)大與VBA易學(xué)易用的特點(diǎn),可以快速的開(kāi)發(fā)出功能強(qiáng)大的AutoCAD程序。
AutoCAD從2005版本開(kāi)始,加入了對(duì).net的支持,這說(shuō)明AutoCAD本身的一些功能也是使用.NET來(lái)開(kāi)發(fā)的,本文使用的是AutoCAD 2010版本。
安裝完AutoCAD以后,還必須安裝.NET開(kāi)發(fā)工具,.NET開(kāi)發(fā)工具很多,但功能最強(qiáng)大的莫過(guò)于微軟的Visual Studio,本文使用VS2010版本。.NET開(kāi)發(fā)語(yǔ)言有C#、VB.NET、托管C++等,本文采用的開(kāi)發(fā)語(yǔ)言是VB.NET。
最后安裝DB2數(shù)據(jù)庫(kù)。DB2數(shù)據(jù)庫(kù)主要應(yīng)用于大型應(yīng)用系統(tǒng),具有較好的可伸縮性,可支持從大型機(jī)到單用戶環(huán)境。本文采用的數(shù)據(jù)庫(kù)是DB2 Express C,它提供了DB2的大多數(shù)功能。
本文以在AutoCAD命令行內(nèi)顯示數(shù)據(jù)庫(kù)的連接狀態(tài)來(lái)討論.NET開(kāi)發(fā)AutoCAD,實(shí)現(xiàn)AutoCAD與DB2數(shù)據(jù)庫(kù)的連接。在本文中,使用VS2010來(lái)創(chuàng)建一個(gè)新的類庫(kù)項(xiàng)目,通過(guò)這個(gè)項(xiàng)目可以生成一個(gè)能被Autocad加載的dll文件,此文件會(huì)向Autocad中加入一個(gè)名為acd的新命令,當(dāng)執(zhí)行這個(gè)命令后,如果AutoCAD已經(jīng)連接上DB2數(shù)據(jù)庫(kù)則會(huì)在命令行中顯示“Open”,否則顯示“數(shù)據(jù)庫(kù)連接錯(cuò)誤”。
(1)新建項(xiàng)目。啟動(dòng)VS2010,選擇“文件”中“新建項(xiàng)目”菜單,在項(xiàng)目類型中選擇VB語(yǔ)言,然后在模板列表中選擇“類庫(kù)”項(xiàng)目,輸入項(xiàng)目名稱“CADConnectDB2”,單擊“確定’創(chuàng)建項(xiàng)目。
(2)添加對(duì)Autocad程序集的引用。在解決方案資源管理器中鼠標(biāo)右鍵單擊項(xiàng)目名,選擇“添加引用”菜單,在彈出的對(duì)話框中加入acdbmgd.dll和acmgd.dll,然后在項(xiàng)目“屬性”面板中選擇“引用”選項(xiàng)卡,將acdbmgd.dll和acmgd.dll的“復(fù)制本地”屬性值設(shè)置為“FALSE”即可。
(3)編寫AutoCAD程序。首先導(dǎo)入CAD.NET托管封裝類。在Class1類的聲明語(yǔ)句之前導(dǎo)入ApplicationServices,EditorInput和Runtime這三個(gè)命名空間,代碼如下:
Imports Autodesk. AutoCAD. ApplicationServices
Imports Autodesk. AutoCAD. EditorInput
Imports Autodesk. AutoCAD. Runtime
然后加入AutoCAD調(diào)用的命令,必須使用CommandMethod屬性,這個(gè)屬性由Runtime命名空間提供。
<CommandMethod(“ACD”)>_
Public sub CADConnectDB2()
End Sub
最后編寫連接DB2數(shù)據(jù)庫(kù)的程序。首先引入命名空間:Imports System.Data.Oledb,然后創(chuàng)建OledbConnection對(duì)象。程序如下:
‘獲得AutoCAD當(dāng)前活動(dòng)文檔的Editor對(duì)象
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
‘聲明connection對(duì)象
Dim conn As OleDbConnection
Try
conn = New OleDbConnection()
conn.ConnectionString =quot;Provider=IBMDADB2.1;User ID=quot;quot;;Password=quot;quot;;_
Data Source=samplequot;
conn.Open()
Ed.WriteMessage (conn.State.ToString)
conn.Close()
Catch
ed.WriteMessage(quot;數(shù)據(jù)庫(kù)連接錯(cuò)誤quot;)
End Try
(4)啟動(dòng)AutoCAD2010進(jìn)程。在解決方案管理器中右鍵單擊項(xiàng)目名,然后選擇“屬性”菜單項(xiàng)。在項(xiàng)目的屬性頁(yè)對(duì)話框中選擇“調(diào)試”選項(xiàng)卡,在“啟動(dòng)操作”項(xiàng)目中單擊“啟動(dòng)外部程序”項(xiàng)右邊的省略號(hào)按鈕,然后選擇AutoCAD2010安裝目錄下的acad.exe.
(5)編譯程序。按F5鍵或選擇工具欄中的“調(diào)試”來(lái)啟動(dòng)一個(gè)AutoCAD進(jìn)程,生成一個(gè)CADConnectDB2.dll文件。
(6)運(yùn)行程序。在AutoCAD命令行中執(zhí)行NETLOAD命令,加載編譯好的托管程序,然后在命令行中輸入命令acd,并按下Enter鍵,如果AutoCAD已經(jīng)連接上DB2數(shù)據(jù)庫(kù)則會(huì)在命令行中顯示“Open”,否則在命令行中顯示“數(shù)據(jù)庫(kù)連接錯(cuò)誤”。
本文簡(jiǎn)單介紹了用VB.NET開(kāi)發(fā)AutoCAD,實(shí)現(xiàn)AutoCAD與DB2數(shù)據(jù)庫(kù)的連接。在命令行中輸入VB.NET開(kāi)發(fā)的AutoCAD命令后,AutoCAD卻沒(méi)有執(zhí)行該命令,而提示該命令為未知命令,出現(xiàn)這種情況的原因是未將添加的acdbmgd.dll和acmgd.dll這兩個(gè)程序集的“復(fù)制本地”屬性值設(shè)置為“FALSE”。
[1]石志國(guó),劉冀偉,張維存.VB.NET數(shù)據(jù)庫(kù)編程.清華大學(xué)出版社,北京交通大學(xué)出版社.
[2]曾洪飛,張帆,盧擇臨.AutoCAD VBAamp;VB.NET開(kāi)發(fā)基礎(chǔ)與實(shí)例教程.中國(guó)電力出版社.
成金鳳(1985—),女,河北藁城人,本科,主要從事船舶及海洋工程的詳細(xì)設(shè)計(jì)和生產(chǎn)設(shè)計(jì)工作;談景堯(1984—),男,天津人,大專,主要從事船舶及海洋工程的詳細(xì)設(shè)計(jì)和生產(chǎn)設(shè)計(jì)工作。