Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2010 SQL连接对话框_C#_Sql_Visual Studio 2010_Sqlconnection - Fatal编程技术网

C# VS2010 SQL连接对话框

C# VS2010 SQL连接对话框,c#,sql,visual-studio-2010,sqlconnection,C#,Sql,Visual Studio 2010,Sqlconnection,我已经成功地实现了VS2010 SQL连接对话框(从下载到我的一些项目中),并且一直在毫无怨言地使用它。我一直在显式使用它来连接SQL Server,最近我想测试用户是否选中了“保存我的密码”复选框,如下所示: 公共部分类sqlconnectionicontrol:UserControl,IDataConnectionUIControl有一个名为ControlProperties的私有成员类,其中包含我需要的信息的所有访问器-但我无法访问它 这个对话框的编写方式相当复杂,如果我能帮助的话,我不

我已经成功地实现了VS2010 SQL连接对话框(从下载到我的一些项目中),并且一直在毫无怨言地使用它。我一直在显式使用它来连接SQL Server,最近我想测试用户是否选中了“保存我的密码”复选框,如下所示:

公共部分类sqlconnectionicontrol:UserControl,IDataConnectionUIControl
有一个名为
ControlProperties
的私有成员类,其中包含我需要的信息的所有访问器-但我无法访问它


这个对话框的编写方式相当复杂,如果我能帮助的话,我不想去更改那里的源代码。以前有人遇到过这个问题吗?如果是,我如何读取用户是否选择了“保存我的密码”(通过
public bool SavePassword
sqlconnectionicontrol
类中访问)选项(或任何其他相关内容)

如果您可以在这种情况下使用反射,您可以深入挖掘私有属性并提取它们的值。下面是一个示例(基于链接中的Microsoft.Data.ConnectionUI.Sample项目):


但请记住,这种方法会带来一些版本控制问题:如果您打算在将来某个时候升级DataConnection对话框库,这些属性可能在较新的版本中不可用。

好的,您可以使用反射来检索此属性。有点不可靠,但可以做到:)如果你愿意,我可以发布一个代码片段。我会喜欢那个家伙。非常感谢……谢谢你。这是你自己用这个对话框做的吗?@Killercam:不,我刚才写的。我记得不久前使用过这个对话框,但这个任务不涉及检查“保存密码”复选框。这太神奇了,我不知道你可以用反射来做这类事情。如果你知道你能这么快做到这一点,我会感到惊讶!?@Killercam:谢谢:)我知道这种方法,因为我过去曾多次使用它来调查一些外部库的行为。
static void Main(string[] args)
{
    DataConnectionDialog dialog = new DataConnectionDialog();
    DataConnectionConfiguration connectionConfig = new DataConnectionConfiguration(null);
    connectionConfig.LoadConfiguration(dialog);

    if (DataConnectionDialog.Show(dialog) == DialogResult.OK)
    {
        bool isSavePasswordChecked = IsSavePasswordChecked(dialog);
    }
}

private static bool IsSavePasswordChecked(DataConnectionDialog dialog)
{
    var control = GetPropertyValue("ConnectionUIControl", dialog, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty);
    if (control == null)
    {
        return false;
    }

    var properties = GetPropertyValue("Properties", control, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.DeclaredOnly);
    if (properties == null)
    {
        return false;
    }

    var savePassword = GetPropertyValue("SavePassword", properties, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
    if (savePassword != null && savePassword is bool)
    {
        return (bool)savePassword;
    }

    return false;
}

private static object GetPropertyValue(string propertyName, object target, BindingFlags bindingFlags)
{
    var propertyInfo = target.GetType().GetProperty(propertyName, bindingFlags);
    if (propertyInfo == null)
    {
        return null;
    }

    return propertyInfo.GetValue(target, null);
}