65.9K
CodeProject 正在变化。 阅读更多。
Home

UDL.Net,一个从头开始构建的连接字符串编辑器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (23投票s)

2010年2月18日

CPOL

5分钟阅读

viewsIcon

52583

downloadIcon

2844

UDL.Net 是一个从头开始构建的连接字符串编辑器,它借鉴了通用数据链接 (UDL) 和 Visual Studio 的 DataConnectionDialog。

引言

UDL.Net 是一个从头开始构建的连接字符串编辑器,它借鉴了旧的通用数据链接 (UDL) 和较新的 Visual Studio DataConnectionDialog。其目的是提供一个可视化工具来创建和编辑几乎任何数据库系统的连接字符串。

UDL_img1.pngUDL_img2.png

背景

我早就有了这个想法,但出于各种原因,总是不够时间,但最终,我付出了额外的努力,它终于完成了。请注意,这仍然是一个正在进行中的项目,还有很多测试要做,但总的来说,它运行良好。

我测试了它与大多数数据提供程序,它在相对简单和中等复杂的连接字符串方面效果很好,但我还没有测试过它与真正复杂的连接字符串。但理论上,它应该工作得一样;如果有人发现 bug,请发送给我,我会尽快处理。

问题

在我正在进行的一个项目中,经过无数小时搜索用于创建连接字符串的可视化工具,我感到非常惊讶,竟然没有类似的东西可用;事实上,要(在运行时)构建一个连接字符串,我们唯一的选择是 UDL 文件。Visual Studio 2005 还附带了 DataConnectionDialog,但据我所知,它不是 .NET 框架的一部分,而是 Visual Studio 包的一部分,不能用于重新分发。

最后,别无选择,我感到沮丧,决定自己写一个,而且由于输出效果相当不错,我决定与社区分享。

特点

这是此版本中包含的一些功能的列表

  • 100% .NET
  • 适用于 .NET Framework 2.0 或更高版本
  • 独立。除了 .NET 框架本身,不引用任何其他程序集或文件
  • 外部提供程序。支持未注册在 GAC 中的数据提供程序
  • 可扩展。允许您添加自己的提供程序和编辑器
  • 过滤器。限制向最终用户显示的提供程序
  • 适用于任何版本的 ADO.NET 数据提供程序(指数据提供程序本身;此版本仅在 .NET Framework 2.0 或更高版本上运行)
  • 熟悉且简单的用户界面
  • 验证。验证连接字符串,或者可以关闭以用于测试目的

Using the Code

UDL.Net 继承自 CommonDialog,这意味着它的用法与其他对话框(如 OpenFileDialogSaveFileDialog 等)相同。例如

创建新的连接字符串

ConnectionStringDialog fd = new ConnectionStringDialog();
if (fd.ShowDialog(this) != DialogResult.OK)
    return;

string providerID = fd.Provider;
string connStr = fd.ConnectionString;
// do other stuff here

编辑现有的连接字符串

ConnectionStringDialog fd = new ConnectionStringDialog();
// Note: provider is required to edit an existing connection strings
// without it it's impossible to know which provider to use
fd.Provider = "System.Data.SqlClient"; 
fd.ConnectionString = myExistingConnectionString;
if (fd.ShowDialog(this) != DialogResult.OK)
    return;
// do other stuff here

启动时显示特定提供程序

ConnectionStringDialog fd = new ConnectionStringDialog();
fd.Provider = "System.Data.OleDb"; 
if (fd.ShowDialog(this) != DialogResult.OK)
    return;
// do other stuff here

绕过验证

ConnectionStringDialog fd = new ConnectionStringDialog();
// this will allow invalid connection string settings
fd.ValidateConnection = false;
if (fd.ShowDialog(this) != DialogResult.OK)
    return;
// do other stuff here

过滤提供程序列表

有两种过滤提供程序列表项的方法

  • FilterMode.Include(默认)- 此设置将导致只有包含在 Filters 集合中的提供程序才可供最终用户使用。
  • FilterMode.Exclude - 这意味着包含在 Filters 集合中的项将不可供最终用户使用。例如

    如果我们不想支持 DBC 和 OLEDB

    ConnectionStringDialog.FilterMode = FilterMode.Exclude;
    ConnectionStringDialog.Filters.Add("System.Data.Odbc");
    ConnectionStringDialog.Filters.Add("System.Data.OleDb");

    或者,如果我们只想支持 MySQL

    ConnectionStringDialog.FilterMode = FilterMode.Include;
    ConnectionStringDialog.Filters.Add("System.Data.MySql");

公共类

以下是对主要类的简要描述。代码中包含了一些注释,但总体上它是非常易于理解的。

ConnectionStringDialog:这是用户将要实例化的主类,以下是其最相关的成员。

  • 属性
    • Provider - 获取或设置对话框的选定提供程序。如果未在显示对话框之前设置,它将显示可用提供程序的列表。
    • ConnectionString - 获取或设置对话框的连接字符串。

      注意:设置连接字符串无效,除非您也设置了 Provider,因为无法知道连接字符串是用于哪个提供程序的。

    • ValidateConnections - 获取或设置对话框是否只接受有效的连接字符串(默认为 true)。
  • 方法
    • GetConnection() - 使用选定的连接字符串返回选定提供程序的已初始化 IDbConnection(已设置连接字符串,但连接尚未打开)。
    • GetFactory() - 返回选定提供程序的 DbProviderFactory 实例,如果提供程序不支持 Provider Factory 模型,则返回 null
  • 静态成员
    • Filters - 获取过滤器集合。
    • FilterMode - 获取或设置控件的过滤模式。
    • RegisterProvider() - 允许您添加额外的提供程序。默认情况下,对话框将获取安装在 GAC 中的提供程序列表,但如果您想使用不在 GAC 中的提供程序,可以在这里进行。提供程序的要求是它继承自 DbProviderFactory(理想情况下)或实现 IdbConnection(这几乎是标准)。如果您不确定它是否在 GAC 中,您可以添加它,如果它已经在 GAC 中,它不会重复。
    • RegisterEditor() - 允许您添加额外的编辑器。默认情况下,它将加载预定义的编辑器列表,但如果您想创建自己的编辑器,只需创建一个 UserControl 并实现 IUDLEditor,然后将其添加到静态编辑器列表中。

IUDLEditor:这是编辑器的接口。

public interface IUDLEditor
{
    string ConnectionString { get;set;}

    //gets called everytime the controls need to be
    // populated with fresh data.
    void RefreshData();

    // the object that contains the advanced 
    //properties or null if not implemented
    object GetAdvancedPropertiesObject();
}

支持的数据库

理论上,它应该支持任何符合 ADO.NET 标准的数据库,但实际上,每个数据库系统彼此之间都非常不同,并且在其各自的连接字符串中接受的参数方面完全没有标准。

因此,我为我所知的最流行的数据库系统创建了编辑器;根据反馈,我将根据需要继续添加更多编辑器。

作为最后的手段,如果我们正在为没有可用编辑器的提供程序创建或编辑连接字符串,对话框将显示一个通用编辑器,它基本上是一个文本框,用户可以在其中键入连接字符串;虽然不太美观,但好处是所有其他功能仍然像以前一样工作,例如测试连接、验证等。

这是此第一个版本中可用的编辑器列表

  • System.Data.SqlClient
  • System.Data.OleDb
  • System.Data.Odbc
  • System.Data.SqlCe
  • System.Data.OracleClient
  • System.Data.SQLite
  • MySql.Data.MySqlClient
  • Firebird.Data.FirebirdClient
  • Postgre.Data.PostgreClient

编辑器示例图片

UDL_img3.pngUDL_img4.png

UDL_img5.png

历史

  • 2010 年 2 月 23 日 - 改进了 SQL Server、MySql 和 PostgreSql 的 OleDb 编辑器
  • 2010 年 2 月 17 日 - 初始发布
© . All rights reserved.