数据链接属性对话框 (udl)(转)
就是下面这个窗体,一般用在安装或者配置程序里面。
使用前,需要添加两个引用。
1. [.NET Assembly] adodb
2. [COM] Microsoft OLE DB Service Component 1.0 Type Library
调用代码
直接使用 COM
如果你不喜欢添加一堆引用,还可以采取后期绑定方式直接调用 COM。
当然,还有另外一种方法。创建一个扩展名为 .udl 的空文本文件,然后用 Process.Start() 打开它就可以看到链接属性对话框。完成设置后,连接字符串就保存在你创建的那个 udl 文件里面。
使用前,需要添加两个引用。
1. [.NET Assembly] adodb
2. [COM] Microsoft OLE DB Service Component 1.0 Type Library
调用代码
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;
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);
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 文件里面。



浙公网安备 33010602011771号