无声雨的杂录

不讲究辞藻,不需咬文嚼字

   :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理

数据链接属性对话框 (udl)(转)

就是下面这个窗体,一般用在安装或者配置程序里面。

uploads/200608/19_031025_snap1.gif


使用前,需要添加两个引用。

1. [.NET Assembly] adodb
uploads/200608/19_031048_snap2.gif


2. [COM] Microsoft OLE DB Service Component 1.0 Type Library
uploads/200608/19_031052_snap3.gif


调用代码
MSDASC.DataLinks udl = new MSDASC.DataLinksClass();
udl.hWnd = this.Handle.ToInt32(); // 关联当前WinForm句柄,使对话框以模式窗体打开。

// 创建新连接字符串
ADODB.Connection conn = udl.PromptNew() as ADODB.Connection;
string connStr = conn.ConnectionString;

// 编辑已有字符串
ADODB.ConnectionClass conn2 = new ADODB.ConnectionClass();
conn2.ConnectionString = connStr;
object o = conn2;
if (udl.PromptEdit(ref o)) this.textbox1.Text = conn2.ConnectionString;

直接使用 COM

如果你不喜欢添加一堆引用,还可以采取后期绑定方式直接调用 COM。
using System.Runtime.InteropServices;
using System.Reflection;

// ......

Type dataLinksClass = Type.GetTypeFromProgID("DataLinks");
object udl = Activator.CreateInstance(dataLinksClass);

// 设置窗体句柄,使其以模式窗体打开。
dataLinksClass.InvokeMember("hWnd", BindingFlags.SetProperty, null, udl, new object[] { this.Handle.ToInt32() });

// 创建新连接字符串
object conn = dataLinksClass.InvokeMember("PromptNew", BindingFlags.InvokeMethod, null, udl, null);
string connStr = (string)conn.GetType().InvokeMember("ConnectionString", BindingFlags.GetProperty, null, conn, null);

// 编辑已有字符串
Type adoConnection = Type.GetTypeFromProgID("ADODB.Connection");
object conn2 = Activator.CreateInstance(adoConnection);

adoConnection.InvokeMember("ConnectionString", BindingFlags.SetProperty, null, conn2, new object[] { connStr });
if ((bool)dataLinksClass.InvokeMember("PromptEdit", BindingFlags.InvokeMethod, null, udl, new object[] { conn2 }))
{
  string connStr2 = (string)conn.GetType().InvokeMember("ConnectionString", BindingFlags.GetProperty, null, conn2, null);
  this.textbox1.Text = connStr2;
}

if (udl != null) Marshal.ReleaseComObject(udl);
if (conn != null) Marshal.ReleaseComObject(conn);
if (conn2 != null) Marshal.ReleaseComObject(conn2);

当然,还有另外一种方法。创建一个扩展名为 .udl 的空文本文件,然后用 Process.Start() 打开它就可以看到链接属性对话框。完成设置后,连接字符串就保存在你创建的那个 udl 文件里面。
posted on 2007-01-09 10:22  无声雨  阅读(399)  评论(0)    收藏  举报