DataConnectionDialog 是个很好用的东西 ,可以让用户选择数据提供程序 并生成链接字符串。
使用方法代码如下:

Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Microsoft.Data.ConnectionUI;
namespace KeelKit.Controls
{
public partial class BuildConnectString : UserControl
{
public BuildConnectString()
{
InitializeComponent();
}
DataConnectionDialog dcd ;
private void btnBuild_Click(object sender, EventArgs e)
{
try
{
dcd = new DataConnectionDialog();
//添加数据源
AddDS(DataSource.AccessDataSource);
AddDS(DataSource.OdbcDataSource);
AddDS(DataSource.OracleDataSource);
AddDS(DataSource.SqlDataSource);
AddDS(DataSource.SqlFileDataSource);
if (csDataSource != null)
{
//指定默认选择数据源 用来还原 链接字符串到DataConnectionDialog中
dcd.SelectedDataSource = this.csDataSource ;
dcd.SelectedDataProvider = dcd.SelectedDataSource.DefaultProvider;//貌似必须赋值来自dcd.SelectedDataSource的提供器 ,当然,你可以可以取this.csDataSource.DefaultProvider,确保父子关系就可以了。否则链接字符串赋值时会出错
}
dcd.ConnectionString = this.txtCntStr.Text;//给链接字符串赋值
}
catch (Exception)
{
}
DialogResult dr = DialogResult.Cancel ;
try
{
dr= DataConnectionDialog.Show(dcd);
}
catch (Exception)
{
}
if (dr == DialogResult.OK)
{
//保存值
this.txtCntStr.Text = dcd.ConnectionString;
csDataSource = dcd.SelectedDataSource;
csDataProvider = dcd.SelectedDataProvider;
}
}
private void AddDS(DataSource ds)
{
if (csDataSource != null && ds.DisplayName == csDataSource.DisplayName)
{
foreach (var item in ds.Providers )
{
if (item.Name == csDataProvider.Name)
{
DataProvider dp = item;
ds.Providers.Clear();
ds.Providers.Add(dp);
csDataProvider = dp;
csDataSource = ds;
break;
}
}
}
dcd.DataSources.Add(ds);
}
public string ConnectionString
{
get { return this.txtCntStr.Text; }
set { this.txtCntStr.Text = value; }
}
public DataSource csDataSource { get; set; }
public DataProvider csDataProvider { get; set; }
}
}
由于对这个组件没有注释,也没有说明有哪些异常,因此用了一堆try,确保不出错 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix