• Microsoft.Data.ConnectionUI.DataConnectionDialog


    MicrosoftVisualStudio里面的资源之数据库连接配置

    这个功能的实现主要是用了Microsoft.Data.ConnectionUI.dll和Microsoft.Data.ConnectionUI.Dialog.dll这个二个动态库,可以在VS的安装目录的Common7IDE这个目录下面找到(本机的安装路径C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE)。

    找到两个组件 Microsoft.Data.ConnectionUI.dll,Microsoft.Data.ConnectionUI.Dialog.dll

    这两个要一起引用下

    Microsoft.Data.ConnectionUI.dll

    Microsoft.Data.ConnectionUI.Dialog.dll

    测试代码。ok

    string ConnString = null;
    bool isSqlServer = false;
    private void btnTestDataConnectionDialog_Click(object sender, EventArgs e)
    {
    //服务器名称 LENOVO-PCMYSQLEXPRESS
    using (Microsoft.Data.ConnectionUI.DataConnectionDialog dlg = new DataConnectionDialog())
    {
    //添加数据源
    dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.AccessDataSource);
    dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.OdbcDataSource);
    dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.OracleDataSource);
    dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlDataSource);
    dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlFileDataSource);
    //设置默认数据提供对象
    dlg.SelectedDataSource = Microsoft.Data.ConnectionUI.DataSource.SqlDataSource;
    dlg.SelectedDataProvider = Microsoft.Data.ConnectionUI.DataProvider.SqlDataProvider;
    dlg.Text = "连接DCWriter演示数据库";
    //只能够通过DataConnectionDialog类的静态方琺Show出对话框
    //不同使用dialog.Show()或dialog.ShowDialog()来呈现对话框
    if (Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dlg) == System.Windows.Forms.DialogResult.OK)
    {
    //连接字符串"Data Source=LENOVO-PC\MYSQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True"
    ConnString = dlg.ConnectionString;
    isSqlServer = dlg.SelectedDataSource == Microsoft.Data.ConnectionUI.DataSource.SqlDataSource
    || dlg.SelectedDataSource == Microsoft.Data.ConnectionUI.DataSource.SqlFileDataSource;
    }
    MessageBox.Show(ConnString);
    }
    }

    这是本人写的代码的一部分,后面会展示具体的界面显示

    private static IDbConnection InnerCreateConnect()
    {
         if (string.IsNullOrEmpty(_ConnectionString))
         {
           string dbFile = System.IO.Path.Combine(Application.StartupPath, "EMR.mdb");
           if (File.Exists(dbFile))
           {
              // 存在演示数据库文件
              _ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=EMR.mdb";
              _IsSQLServer = false;
            }
            else
            {
              try
             {
               using (Microsoft.Data.ConnectionUI.DataConnectionDialog dlg = new Microsoft.Data.ConnectionUI.DataConnectionDialog())
               {
                  dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.AccessDataSource); // Access
                  dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlDataSource); // Sql Server
                  dlg.DataSources.Add(Microsoft.Data.ConnectionUI.DataSource.SqlFileDataSource); // Sql Server File

                  // 初始化
                  dlg.SelectedDataSource = Microsoft.Data.ConnectionUI.DataSource.AccessDataSource;
                  dlg.SelectedDataProvider = Microsoft.Data.ConnectionUI.DataProvider.OleDBDataProvider;

                  dlg.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=www.mdb";
                  dlg.Text = "连接演示数据库";
                  //只能够通过DataConnectionDialog类的静态方琺Show出对话框
                  //不同使用dialog.Show()或dialog.ShowDialog()来呈现对话框
                  if (Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dlg) == DialogResult.OK)
                   {
                      _ConnectionString = dlg.ConnectionString;
                      _IsSQLServer = dlg.SelectedDataSource == Microsoft.Data.ConnectionUI.DataSource.SqlDataSource
                     || dlg.SelectedDataSource == Microsoft.Data.ConnectionUI.DataSource.SqlFileDataSource;
                    }
               }
            }
            catch (Exception ext)
            {
              MessageBox.Show(ext.Message);
              _ConnectionString = null;
             }
         }
      }
      if (string.IsNullOrEmpty(_ConnectionString) == false)
      {
         if (_IsSQLServer)
          {
            SqlConnection conn = new SqlConnection(_ConnectionString);
            return conn;
           }
           else
           {
              OleDbConnection conn = new System.Data.OleDb.OleDbConnection(_ConnectionString);
              return conn;
            }
        }
        return null;
     }

    界面以及操作如下

    1、代码如下: 

    Microsoft.Data.ConnectionUI.DataConnectionDialog dlg = new Microsoft.Data.ConnectionUI.DataConnectionDialog();

    DataSource.AddStandardDataSources(dlg);
    if (DataConnectionDialog.Show(dlg) == System.Windows.Forms.DialogResult.OK) 

    {
        //Clipboard.SetText(dlg.ConnectionString);
        MessageBox.Show(string.Format("{0} {1}", dlg.ConnectionString, dlg.SelectedDataProvider.DisplayName));
    }

     2、数据源选择

    3、属性选择

    4、完成后通过ConnectionString属性获取连接字符串

    总结:

    以上操作时每次都会弹出的,建议设置默认的,这样的话只有在更换数据源的时候再出现,其他时候都是默认数据库的(可以默认sql数据库)

    主要是用到以下三条语句 

    //设置数据源

    dlg.SelectedDataSource = DataSource.SqlDataSource;

    //设置提供程序
    dlg.SelectedDataProvider = DataProvider.SqlDataProvider;

    //默认的连接字符串
    dlg.ConnectionString = "Data Source=LocalHost;Intergated Security=SSPI;Initial Catalog=TestDB";

     

    下面是另一种方法 

    这个功能的实现主要是用了Microsoft.Data.ConnectionUI.dll和Microsoft.Data.ConnectionUI.Dialog.dll这个二个动态库,可以在VS的安装目录的Common7IDE这个目录下面找到。添加引用就不多说了。要想实现简单的,VS提供的几个数据库类型的支持,在这2个动态库的支持下很是方便啊。代码如下:

    Microsoft.Data.ConnectionUI.DataConnectionDialog diag = new Microsoft.Data.ConnectionUI.DataConnectionDialog(); Microsoft.Data.ConnectionUI.DataSource.AddStandardDataSources(diag); Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(diag);
    运行后的效果如下:
     

                 image

    本来显示的应该都是英文的,但是只需要在bin目录下面建一个zh-CHS的目录,将Microsoft.Data.ConnectionUI.Dialog.resources.dll拷入到该目录下面,运行之后就是中文界面的,得到的效果就是上图中所显示的了。如果要自己定义一个数据源,让他支持所有的DataProvider,就需要先new一个DataSource出来,然后给这个DataSource添加DataProvider。代码如下:

    Microsoft.Data.ConnectionUI.DataConnectionDialog diag = new Microsoft.Data.ConnectionUI.DataConnectionDialog();
    DataSource d = new DataSource("自定义类型1", "支持所有的DataProvider");
    d.Providers.Add(DataProvider.OdbcDataProvider);
    d.Providers.Add(DataProvider.OleDBDataProvider);
    d.Providers.Add(DataProvider.OracleDataProvider);
    d.Providers.Add(DataProvider.SqlDataProvider);
    DataSource d2 = new DataSource("自定义类型2", "支持部分DataProvider");
    d2.Providers.Add(DataProvider.OdbcDataProvider);
    d2.Providers.Add(DataProvider.OleDBDataProvider);
    diag.DataSources.Add(d);
    diag.DataSources.Add(d2);
    DataConnectionDialog.Show(diag);

    上面的代码运行后的效果是下面右边的图,左边的是只添加一个DataSource,添加了所有的DataProvider之后的效果。右边的这个效果就可以类似创建出来了。

    imageimage

    现在我有一个麻烦,现在添加的都只是VS自带的DataProvider,如果我想创建一个用来连接Sqlite的ConnectionUI,或者是支持mysql的ConnectionUI,该怎么做?虽说DataProvider可以自己new一个出来,但是最终加入到DataSource中之后,运行出来的效果完全就不是我想要的效果。用如下代码:

    DataConnectionDialog dlg = new DataConnectionDialog();
    DataSource d = new DataSource("Sqlite","Sqlite数据源");
    DataProvider p = new DataProvider("Sqlite数据提供程序", "Sqlite数据提供程序", "Sqlite", "用来连接Sqlite数据库");
    d.Providers.Add(p);
    dlg.DataSources.Add(d);
    DataConnectionDialog.Show(dlg);

    可得运行效果如下:

    image

    就只有一个ConnectionString属性了,而且不管我里面写什么,测试连接的时候总是成功的。Sqlite有一个ADO.NET 2.0/3.5 SQLite Data Provider,我安装了之后,添加sqlite数据源的时候运行出来的效果是这样的:

    image

    其实这个效果才是我想要的效果,不知道VS是怎么显示出这个对话框的。要是想在自己的程序中用的话该怎么实现。我只知道安装的那个ADO.NET 2.0/3.5 SQLite Data Provider之后,有一个应该是用来支持这个对话框的动态库,SQLite.Designer.dll,里面封装了一个SQLiteConnectionUIControl,我觉得上面这个图的显示效果,就是这个SQLiteConnectionUIControl了。刚刚测试了一下,这个SQLiteConnectionUIControl应该是上面那个图中英文显示部分,从Database到下面的Password那一块.要想直接拿来重用还是有点麻烦啊,不知道有没有高人有好的办法。我这里是拿Sqlite为例子,要想拿mysql的实现相同的功能也有同样的问题,因为他们都不是VS自带的DataProvider中的一员。

  • 相关阅读:
    lmdb简介——结合MVCC的B+树嵌入式数据库
    influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB
    时序列数据库选型
    VoltDB介绍——本质:数据保存在内存,充分利用CPU,单线程去锁,底层数据结构未知
    关于时间序列数据库的思考——(1)运用hash文件(例如:RRD,Whisper) (2)运用LSM树来备份(例如:LevelDB,RocksDB,Cassandra) (3)运用B-树排序和k/v存储(例如:BoltDB,LMDB)
    241. Different Ways to Add Parentheses——本质:DFS
    麦克风阵列技术入门(3)
    [LeetCode]Palindrome Partitioning 找出所有可能的组合回文
    Linux在简短而经常使用的命令
    数据结构c字符串操作语言版本
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/5553409.html
Copyright © 2020-2023  润新知