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

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

找到两个组件 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-PC\MYSQLEXPRESS
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}\r{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的安装目录的Common7\IDE这个目录下面找到。添加引用就不多说了。要想实现简单的,VS提供的几个数据库类型的支持,在这2个动态库的支持下很是方便啊。代码如下:

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

本来显示的应该都是英文的,但是只需要在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之后的效果。右边的这个效果就可以类似创建出来了。

现在我有一个麻烦,现在添加的都只是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);

可得运行效果如下:

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

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

Microsoft.Data.ConnectionUI.DataConnectionDialog的更多相关文章

  1. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器

    很久没写博客了,这段时间情绪不那么稳定,还是心态的问题... 就简单写个问题的解决方法吧,其实最近遇到的问题蛮多的,就拿这个解决过后又遇到的来写吧. 正如标题一样:VS2013 无法为目标平台“Mic ...

  2. 问题-Error creating object. Please verify that the Microsoft Data Access Components 2.1(or later) have been properly installed.

    问题现象:软件在启动时报如下错误信息:Exception Exception in module zhujiangguanjia.exe at 001da37f. Error creating obj ...

  3. 未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage(转)

    版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显 ...

  4. 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”

    问题: 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“Entity ...

  5. WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).

    WIN7系统 64位出现  Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).请安装 Microsoft Data Acces ...

  6. ASP.NetCore 错误 NU1605 检测到包降级: Microsoft.Data.Sqlite 从 2.2.1 降级到 2.1.0

    找到使用的.csproj文件 将 <PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0& ...

  7. UWP使用Microsoft.Data.Sqlite的记录

    我在UWP中使用SQLite数据库时,并没有使用网上的SQLite for Universal App Platform方案,而使用了Microsoft和SQLite社区一起维护的Microsoft. ...

  8. 未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage

    本文出处:http://blog.sina.com.cn/s/blog_6fe3efa301016i64.html vs 2005 ,vs 2008, vs 2010,安装后有时出现这个错误(我的机器 ...

  9. c# 创建项目时提示:未能正确加载“microsoft.data.entity.design.bootstrappackage

    vs 2005 ,vs 2008, vs 2010,安装后有时出现这个错误(我的机器装的x64的win7),很烦人.找了很多地方都不能解决.其实说起来还是开发国家牛,轻易就解决了这个问题.其实出现这个 ...

随机推荐

  1. System.UnauthorizedAccessException: 拒绝访问 temp 目录。用来运行 XmlSerializer 的标识“NT AUTHORITY\NETWORK SERVICE”没有访问 temp 目录的足够权限。CodeDom 将使用进程正在使用的用户帐户进行编译,这样,如

    解决方案:IIS的应用程序池权限不够,应用程序给localsystem账号权限即可. 以客户的服务器系统2003sp2为例,修改步骤如下: 控制面板---管理工具--Internet 信息服务(IIS ...

  2. iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)

    iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版) 很多的应用都需要用到手机的唯一标示,而且要求这个唯一标示不能因为应用app的卸载或者改变而变化. 在iO ...

  3. 浏览器页面区域大小的js获取方法

    浏览器页面区域大小的获取:  /在IE.FireFox.Opera下都可以使用  document.body.clientWidth  document.body.clientHeight  //即可 ...

  4. pyunit实现数据测试框架

    PyUnit提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象的初始化工作可以在setUp()方法中完成,而资源的释放则可以在tearDown()方法中完成. 使用PyUnit可以像 ...

  5. NULL, NUL, EOF, '\0',0区别

    NULL: 定义为0或0L或(void *)0,用于指示一个指针值是空,即什么都不指:'\0': 用且只用字符串结束符;NUL : 0x00,0值字符,可以用于结束ASCII字符串,和'\0'类似,但 ...

  6. C语言的32个关键字

    由ANSI标准定义的C语言关键字共个: auto double int struct break else long switch case enum register typedef char ex ...

  7. unity 3d-Easy Touch 3教程 转

    Easy Touch 教程 转自:http://www.unitymanual.com/thread-31332-1-1.html 1.import “Easy Touch 3”的资源包 2.创建人物 ...

  8. select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)

    一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...

  9. 浅谈string

    #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string;using ...

  10. 【转】 设定linux 系统可用资源

    getrlimit和setrlimit函数  每个进程都有一组资源限制,其中某一些可以用getrlimit和setrlimit函数查询和更改. #include #include int getrli ...