EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 643|回复: 0
打印 上一主题 下一主题

[数据库操作] 使用FDO API连接到各种数据源

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:50:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Map 3D可以通过FDO技术连接到各种数据源,包括SHP文件,SDF文件,MySQL,SQL Server Spatial,Oracle等等。当然了,连接到不同数据源肯定有不同的参数,或者理解成连接字符串的组成部分。那这些参数都是什么呢?我们可以通过下面一段代码来深入理解这个参数:
闲话不多少,直接上代码,你可以在Map 3D中运行一下就会发觉他的奥妙:



using Autodesk.AutoCAD;
using Autodesk.AutoCAD.Runtime;
using OSGeo.FDO;
using OSGeo.FDO.Commands;
using OSGeo.FDO.Commands.Schema;
using OSGeo.FDO.Connections;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using OSGeo.FDO.Schema;
using OSGeo.FDO.Connections.Capabilities;
using OSGeo.FDO.ClientServices;
using OSGeo.FDO.Commands.DataStore;
    public class Class1
    {
        IConnection m_pConnection = null;
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        FeatureClass m_baseClass;
        FeatureClass m_riverClass;
        ProviderCollection m_Providers;
        string m_sProviderName;


        [CommandMethod("connect")]
        public void Connect()
        {
            IConnectionManager connMgr;
            int index;
            Provider provider;

            IProviderRegistry registry = FeatureAccessManager.GetProviderRegistry();
            m_Providers = registry.GetProviders();

            for (int i = 0; i < m_Providers.Count; i++)
            {
                provider = m_Providers;
                ed.WriteMessage(string.Format("FDO support provider {0}, its index is {1} \n", provider.Name, i));
            }

            PromptIntegerResult intRes = ed.GetInteger("please input the provider's index");
            if (intRes.Status == PromptStatus.OK)
            {
                index = intRes.Value;
               provider = m_Providers[index];
                m_sProviderName = provider.Name;
                string shortName = provider.Name.Split('.')[1];

                try
                {
                    connMgr = FeatureAccessManager.GetConnectionManager();
                    m_pConnection = connMgr.CreateConnection(m_sProviderName);

                    IConnectionInfo connInfo = m_pConnection.ConnectionInfo;
                    IConnectionPropertyDictionary properties = connInfo.ConnectionProperties;

                    InputParametersValue(properties);

                    ConnectionState connState = m_pConnection.Open();
                    
                    ed.WriteMessage("connect status is "+connState.ToString() + "\n");
                }
                catch (OSGeo.FDO.Common.Exception exception)
                {
                    ed.WriteMessage("There are some exceptions with message : " + exception.Message + "\n");
                }

               
            }
            else
            {
                ed.WriteMessage("you did not select a correct provider , exit \n");
                return;
            }



        }

        [CommandMethod("DisConnect")]
        public void CloseConnection()
        {
            m_pConnection.Close();
        }

        private void InputParametersValue(IConnectionPropertyDictionary properties)
        {
            string[] propertiesNames = properties.PropertyNames;

            foreach (string name in propertiesNames)
            {
                PromptStringOptions pso = new PromptStringOptions("Please input the value for \"" + name + "\":");
                PromptResult psr = ed.GetString(pso);

                if (properties.IsPropertyRequired(name))
                {
                    while (psr.Status != PromptStatus.OK)
                    {
                        ed.WriteMessage(string.Format("Parameter \"{0}\" is required, please input value again\n", name));
                        psr = ed.GetString(pso);
                    }
                    properties.SetProperty(name, psr.StringResult);
                }

            }
        }

        private void ListPropertiesParameters(IDataStorePropertyDictionary properties)
        {
            foreach (string name in properties.PropertyNames)
            {
                ed.WriteMessage(name + "\n");
            }
        }

        [CommandMethod("CreateDataStore")]
        public void CreateDataStore()
        {
            ICreateDataStore createDS = m_pConnection.CreateCommand(CommandType.CommandType_CreateDataStore) as ICreateDataStore;
            IDataStorePropertyDictionary properties = createDS.DataStoreProperties;

            InputParametersValue(properties);

            createDS.Execute();
        }
}


作者:峻祁连
邮箱:junqilian@163.com
出处:http://junqilian.cnblogs.com/
欢迎转载,请在文章页面明显位置给出原文链接。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 08:11

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表