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