C# .NETC中的SqlConnectionStringBuilder表单#

C# .NETC中的SqlConnectionStringBuilder表单#,c#,.net,sql,database-connection,C#,.net,Sql,Database Connection,我想知道如何将数据链接表单添加到WIN应用程序中。 您知道用户可以在哪些表单上选择要连接的SQL server 以及他们将在wht数据库上使用什么类型的安全性 像这张照片上的一样 您可以通过一些COM介绍来实现这一点……但随后您必须将一组互操作程序集引入到您的项目中,这可能是一种拖拉。此代码将使用反射显示对话框 public static string ShowDialog( IWin32Window owner, string

我想知道如何将数据链接表单添加到WIN应用程序中。 您知道用户可以在哪些表单上选择要连接的SQL server 以及他们将在wht数据库上使用什么类型的安全性

像这张照片上的一样

您可以通过一些COM介绍来实现这一点……但随后您必须将一组互操作程序集引入到您的项目中,这可能是一种拖拉。此代码将使用反射显示对话框

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

您可以通过一些COM介绍来实现这一点……但随后您必须将一组互操作程序集引入到您的项目中,这可能是一种拖累。此代码将使用反射显示对话框

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

更多信息。

更多信息。

我认为最好的选择是使用Microsoft提供的代码:

它是VisualStudio内部使用的连接对话框


但是,它只适用于注册的ADO.NET提供程序。

我认为最好的选择是使用Microsoft提供的代码:

它是VisualStudio内部使用的连接对话框


但是,它只适用于已注册的ADO.NET提供程序。

我再次对这个问题感到困惑,现在我尝试从app.config文件发送连接sting以填充初始参数,但我总是在object result=dlType.InvokeMember上获得exeption。Thanx in advice中的任何建议实际上可能有助于打开一个新的问题,以便为其他人记录整个问题/解决方案。Thanx在您的关注下,我将尝试一段时间,如果我无法理解,那么我将打开一个新的SO,但我有点不好意思让一次又一次的人为我编写代码。最好的敬意不是羞耻……我们都必须从某个地方学习。很多这类东西都很奇怪,你只能一次把头撞在墙上好几天才能学会。我又一次被这个问题压得喘不过气来,现在我尝试从app.config文件发送连接sting来填充初始参数,但我总是得到object result=dlType.InvokeMember的验证。Thanx in advice中的任何建议实际上可能有助于打开一个新的问题,以便为其他人记录整个问题/解决方案。Thanx在您的关注下,我将尝试一段时间,如果我无法理解,那么我将打开一个新的SO,但我有点不好意思让一次又一次的人为我编写代码。最好的敬意不是羞耻……我们都必须从某个地方学习。很多这些东西都很奇怪,你只能通过一次用头撞墙几天来学习。