2009-04-10 58 views

回答

2

你可以做到這一點通過一些COM Introp ......但你必須在一堆互操作程序集到您的項目可以是一拖拉。此代碼將使用反射顯示對話框。

public static string ShowDialog(IWin32Window owner, 
           string connectionString) 
{ 
    Type dlType = Type.GetTypeFromProgID("DataLinks", true); 
    Type acType = Type.GetTypeFromProgID("ADODB.Connection", true); 

    object form = Activator.CreateInstance(dlType); 
    object connection = Activator.CreateInstance(acType); 

    acType.InvokeMember( 
     "ConnectionString", 
     BindingFlags.Public | BindingFlags.SetProperty, 
     null, 
     connection, 
     new object[]{ connectionString } 
     ); 
    object result = 
    dlType.InvokeMember( 
     "PromptEdit", 
     BindingFlags.Public | BindingFlags.InvokeMethod, 
     null, 
     form, 
     new object[]{ connection } 
     );   
    if(result != null && (bool)result) 
     return acType.InvokeMember( 
        "ConnectionString", 
        BindingFlags.Public | BindingFlags.GetProperty, 
        null, 
        connection, 
        new object[]{}) as string; 

    return null; 
} 

這基本上轉化爲以下VB腳本

form = GetObject("DataLinks") 
connection = GetOBject("ADODB.Connection") 
connection.ConnectionString = "existing connection" 
form.PromptEdit(connection) 
Return connection.ConnectionString 
+0

我再次堆積在這個問題上, 現在我嘗試從app.config文件發送連接sting來填充初始參數,但我總是得到對 對象result = dlType.InvokeMember的exeption。 任何建議 建議Thanx – adopilot 2009-05-13 11:39:05

1

更多的是here

1

我認爲最好的選擇是使用微軟提供的代碼:http://code.msdn.microsoft.com/Connection

它是Visual Studio中使用的連接對話框。

但是,它只適用於已註冊的ADO.NET提供程序。