与 MySQL 类似的调用方法,但是似乎 Nuget 上面的包有些问题,我是直接调用本地的 DmProvider.dll 添加引用:
1 2 3
var connection = new DmConnection(); connection.ConnectionString = $"Server={server}; Port={port}; User Id={user}; PWD={password}"; connection.Open();
SQL语句调用
1 2 3 4 5 6 7 8 9
using (var command = new DmCommand("sql语句", connection)) using (var reader = command.ExecuteReader()) { while (reader.Read()) { var ret = reader.GetString(0); ...... } }
privateboolUpdateTitleData(Dictionary<string, string> titleMap, Database db) { using (var trans = db.TransactionManager.StartTransaction()) { var blockTable = db.BlockTableId.GetObject<BlockTable>(); var modelSpace = blockTable[BlockTableRecord.ModelSpace].GetObject<BlockTableRecord>(); foreach (var id in modelSpace) { var titleBlock = id.GetObject<BlockReference>(); if (string.Compare(titleBlock.Name, DGTitleBlockNameString, StringComparison.OrdinalIgnoreCase) != 0) continue;
foreach (ObjectId attId in titleBlock.AttributeCollection) { var attRef = attId.GetObject<AttributeReference>(); if (attRef == null || !titleMap.TryGetValue(attRef.Tag, outvarvalue)) continue; ...... } } } }
privateboolUpdateBomData(List<Dictionary<string, string>> bomData, Database db) { using (var trans = db.TransactionManager.StartTransaction()) { Dictionary<string, ObjectId> idMap = new Dictionary<string, ObjectId>(); var blockTable = db.BlockTableId.GetObject<BlockTable>(); var modelSpace = blockTable[BlockTableRecord.ModelSpace].GetObject<BlockTableRecord>(); foreach (var id in modelSpace) { var bomBlock = id.GetObject<BlockReference>();
bool isBomBlock = false; foreach (var name in _bomBlockNames) isBomBlock &= string.Compare(bomBlock.Name, name, StringComparison.OrdinalIgnoreCase) != 0; if (isBomBlock) continue;
foreach (ObjectId attId in bomBlock.AttributeCollection) { AttributeReference attRef = attId.GetObject<AttributeReference>(); if (String.Compare(attRef.Tag, DGBomXuHaoNameString, StringComparison.OrdinalIgnoreCase) != 0) continue;
idMap[attRef.TextString] = id; break; } }
foreach (var bomRowData in bomData) { if (!idMap.ContainsKey(bomRowData[DGBomXuHaoNameString])) continue;
var bomRowBlock = trans.GetObject(idMap[bomRowData[DGBomXuHaoNameString]], OpenMode.ForRead) as BlockReference; foreach (ObjectId attId in bomRowBlock.AttributeCollection) { var attRef = attId.GetObject<AttributeReference>(); if (!bomRowData.TryGetValue(attRef.Tag, outvarvalue)) continue;
attRef.TextString = value; ...... } }
trans.Commit(); }
returntrue; }
图纸另存为指定版本
由于客户大部分图纸都是 AutoCAD 2010 绘制的,默认的保存会变为 2018 版本,而官方 API 没有找到直接指定版本的保存,所以只能曲线救国,通过另存为的方式指定版本: