在实际的开发中,为了方便软件的部署我们常常需要让客户手动的选择数据源和数据连接信息。当然我们可以将这些信息写在XML的配置文件里.但是客户并不是专业的编程人员,一不小心就会使连接串写错,导致系统无法运行,最好是让用户能够通过一个图形界面来选择,如下图:

      这样子,既方便,有不容易出问题。下来我们就看看怎么实现。我的思路就是调用VS自带的工具,由于没有相关的文档,只有通过反汇编了。先添加对Microsoft.Data.ConnectionUI.Dialog.dll的引用,这个assmbly在你的VS2005的安装目录下具体是在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE下边,我的VS安装在D盘,大家可以根据情况去找,调用很简单,下面是代码:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingMicrosoft.Data.ConnectionUI;

namespacetestConnectionStringUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
DataConnectionDialog dlg = new DataConnectionDialog();

dlg.DataSources.Add(DataSource.SqlDataSource);
if (DataConnectionDialog.Show(dlg, this) == DialogResult.OK)
{
textBox1.Text = dlg.ConnectionString;
}

}
}
}

解释一下这段很简单的代码,我创建了一个WindowsApplication,其中有一个窗体,在窗体上放置了一个TextBox和一个Button控件,在Button的点击事件里添加数据源选择对话框的调用。DataConnectionDialog 的调用比较有意思,虽然DataConnectionDialog提供了Show和ShowDialog实例方法,但是你却不能调用,你只能调用Show静态方法,Show方法有两个重载版本:

publicstaticDialogResult Show(DataConnectionDialog dialog);
publicstaticDialogResult Show(DataConnectionDialog dialog, IWin32Window owner);
publicstaticDialogResult Show(DataConnectionDialog dialog)
{
return DataConnectionDialog.Show(dialog, null);
}

下边是第二个方法的实现:

publicstaticDialogResult Show(DataConnectionDialog dialog, IWin32Window owner)
{
DialogResult result2;
if (dialog == null)
{
throw new ArgumentNullException("dialog");
}
if (dialog.DataSources.Count == 0)
{
throw new InvalidOperationException(SR.GetString("DataConnectionDialog_NoDataSourcesAvailable"));
}
foreach (DataSource source1 in dialog.DataSources)
{
if (source1.Providers.Count == 0)
{
throw new InvalidOperationException(SR.GetString("DataConnectionDialog_NoDataProvidersForDataSource", new object[] { source1.DisplayName.Replace("'", "''") }));
}
}
Application.ThreadException += new ThreadExceptionEventHandler(dialog.HandleDialogException);
dialog._showingDialog = true;
try
{
DialogResult result1;
if ((dialog.SelectedDataSource == null) || (dialog.SelectedDataProvider == null))
{
DataConnectionSourceDialog dialog1 = new DataConnectionSourceDialog(dialog);
dialog1.Title = dialog.ChooseDataSourceTitle;
dialog1.HeaderLabel = dialog.ChooseDataSourceHeaderLabel;
(dialog1.AcceptButton as Button).Text = dialog.ChooseDataSourceAcceptText;
if (dialog.Container != null)
{
dialog.Container.Add(dialog1);
}
try
{
if (owner == null)
{
dialog1.StartPosition = FormStartPosition.CenterScreen;
}
dialog1.ShowDialog(owner);
if ((dialog.SelectedDataSource == null) || (dialog.SelectedDataProvider == null))
{
return DialogResult.Cancel;
}
goto Label_015B;
}
finally
{
if (dialog.Container != null)
{
dialog.Container.Remove(dialog1);
}
dialog1.Dispose();
}
}
dialog._saveSelection = false;
Label_015B:
if (owner == null)
{
dialog.StartPosition = FormStartPosition.CenterScreen;
}
Label_0165:
result1 = dialog.ShowDialog(owner);
if (result1 == DialogResult.Ignore)
{
DataConnectionSourceDialog dialog2 = new DataConnectionSourceDialog(dialog);
dialog2.Title = dialog.ChangeDataSourceTitle;
dialog2.HeaderLabel = dialog.ChangeDataSourceHeaderLabel;
if (dialog.Container != null)
{
dialog.Container.Add(dialog2);
}
try
{
if (owner == null)
{
dialog2.StartPosition = FormStartPosition.CenterScreen;
}
result1 = dialog2.ShowDialog(owner);
goto Label_0165;
}
finally
{
if (dialog.Container != null)
{
dialog.Container.Remove(dialog2);
}
dialog2.Dispose();
}
}
result2 = result1;
}
finally
{
dialog._showingDialog = false;
Application.ThreadException -= new ThreadExceptionEventHandler(dialog.HandleDialogException);
}
return result2;
}

在我编写的代码里面只提供了sql server的数据源,你还可以使用别的数据源或者同时使用多个数据源,如果你不会使用反汇编的话,我可以把其余的数据源列出来以供你使用:OdbcDataSource,OracleDataSource,SqlFileDataSource,AccessDataSource,SqlDataSource
运行程序,点击按钮,选择数据,选择相应的provider,填写数据源的相关信息,然后点击OK,现在数据源连接串出现在了TextBox里了。
      你可以利用这个来做个小工具,辅助自己平时的日常配置工作。如果你要发布产品,你可以从中学习它的制做思路,来做自己的数据源选择对话框。

本文转自纶巾客博客园博客,原文链接:http://www.cnblogs.com/guanjinke/archive/2006/12/03/580236.html,如需转载请自行联系原作者

如何调用VS自带的数据源选择对话框相关推荐

  1. Android调用系统自带的文件管理器进行文件选择

    这几天在做的项目网盘.上传时需要用到调用系统自带的文件管理器来选择文件,后来就在考虑怎么调用,网上也搜了很久,没有很好的解决方法,后来在一瞬间发现了一篇不错的文章,借鉴了一下代码. [java] vi ...

  2. 安卓手机如何打开php文件夹,Android_Android中调用系统的文件浏览器及自制简单的文件浏览器,调用系统自带的文件浏览器- phpStudy...

    Android中调用系统的文件浏览器及自制简单的文件浏览器 调用系统自带的文件浏览器这很简单: /** 调用文件选择软件来选择文件 **/ private void showFileChooser() ...

  3. Android多媒体学习五:调用Android自带的播放器播放Audio

    Android有其自带的播放器,我们可以使用隐式Intent来调用它:通过传入一个Action为ACTION_VIEW同时,指定Data为所要播放的Audio的Uri对象,并指定格式信息,则我们就可以 ...

  4. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  5. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

  6. uni-app用uni.chooseImage API调用相机或从相册中选择图片

    uni-app用uni.chooseImage API调用相机或从相册中选择图片 chooseImage: function() {var _this = this;uni.chooseImage({ ...

  7. 电脑自带matlab,matlab能不能调用电脑自带的摄像头?

    matlab能不能调用电脑自带的摄像头? mip版  关注:80  答案:2  悬赏:20 解决时间 2021-02-24 12:29 已解决 2021-02-23 23:18 rt,难道只能调用US ...

  8. [转]mpvue中的小程序调用系统自带查看图片的功能

    mpvue中的小程序调用系统自带查看图片的功能 这里举个栗子: <template><div class="keting"><div class=&q ...

  9. Android多媒体学习八:调用Android自带的音频录制程序,实现录制

    Android中有自带的音频录制程序,我们可以通过指定一个Action为MediaStore.Audio.Media.RECORD_SOUND_ACTION的Intent来 启动它就可以了.然后在on ...

  10. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割

    记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...

最新文章

  1. 通过History Trends Unlimited通过统计笔记本Chrome浏览器Top10网页历史访问量(截止至2021.11.23)
  2. 通过一段简单的代码,介绍 ABAP 的预定义类型 c
  3. 一个人自学会java有用吗,大连java程序员培训经历(自学Java可以吗)
  4. jquery --- 收缩兄弟元素
  5. 设计微服务架构需要解决的问题
  6. lamp mysql位置_linux查看 LAMP环境安装路径
  7. 获取windows所有端口
  8. 亲戚(信息学奥赛一本通-T1346)
  9. Linux下如何进入Redis客户端
  10. 射影几何----帕普斯定理的证明
  11. 遥控小车之:HTML5+ 虚拟摇杆
  12. linux 极路由救砖,极路由HC5761A救砖日志
  13. 运气和技术的另类平衡————对大逃杀及战棋类游戏大热的原因思考(正片)
  14. Sequoia DB数据库操作
  15. AJP:22q11.2缺失综合征青少年gamma频带反应和远程通信中断的异常发育模式
  16. 特征工程和数据预处理常用工具和方法
  17. Flutter中文网
  18. 经典的汽车车灯模具结构解析
  19. 每一个JAVA程序员都应该怀揣一个架构师的梦,这样你的职业发展前景一片大好...
  20. vbox共享文件夹 linux,Vbox下创建Linux和Windows的共享文件夹

热门文章

  1. IIS 7.0与ASP.NET
  2. PIC浅谈--《x86/x64体系探索及编程》试读
  3. 检测用户浏览器是否支持cookie
  4. NMF(非负矩阵分解)的场景应用
  5. php取excel中的值,在Php Excel中使用列名获取单元格值
  6. 1016 部分A+B (15 分)—PAT (Basic Level) Practice (中文)
  7. L1-001 Hello World (5 分)—团体程序设计天梯赛
  8. Linux创建内核线程kthread_create的用法介绍
  9. mm和mmm编译说明
  10. http 性能测试. Apache ab 使用.