c#安装项目的连接UI.对话框

c#安装项目的连接UI.对话框,c#,dialog,connection,C#,Dialog,Connection,我将Microsoft.Data.ConnectionUI.Dialog.dll和Microsoft.Data.ConnectionUI.dll dll dll添加到我的项目中,并使用以下代码: Microsoft.Data.ConnectionUI.DataConnectionDialog dcd = new Microsoft.Data.ConnectionUI.DataConnectionDialog(); Microsoft.Data.ConnectionUI.

我将Microsoft.Data.ConnectionUI.Dialog.dll和Microsoft.Data.ConnectionUI.dll dll dll添加到我的项目中,并使用以下代码:

    Microsoft.Data.ConnectionUI.DataConnectionDialog dcd = new Microsoft.Data.ConnectionUI.DataConnectionDialog();

        Microsoft.Data.ConnectionUI.DataSource.AddStandardDataSources(dcd);

        if (Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dcd) == System.Windows.Forms.DialogResult.OK)
        {
            //
        }
        else
        {
            //
        }
当我在普通的windows应用程序中使用它时,一切似乎都正常(显示带有高级按钮的标准VS dataconnection对话框)。当我在安装项目中使用它时,它只显示高级对话框,并且“确定”按钮被禁用。用户可以测试连接,但不能按OK按钮


有人知道这不起作用的原因吗?

根据设置启用/禁用按钮。

在本文中:作者对数据源进行“硬编码”,从而禁用“更改”按钮

设置数据源名称时,应启用“确定”按钮。我打开了
数据连接对话框源代码
代码,向您展示:

在Micrsost.Data.ConnectionUI.Dialog项目中,打开DataConnectionDialog.cs类,可以看到以下事件:

private void ConfigureAcceptButton(object sender, EventArgs e)
{
try
{
acceptButton.Enabled = (ConnectionProperties != null) ? ConnectionProperties.IsComplete : false;
}
catch
{
acceptButton.Enabled = true;
}
}
上述事件通过ConnectionProperties方法连接,并在每次激发PropertyChange事件时调用:

properties.PropertyChanged += new EventHandler(ConfigureAcceptButton);

要启用“确定”按钮,您需要满足ConnectionProperties.IsComplete条件。

我从PowerPoint插件运行DataConnectionDialog时遇到了与您相同的问题

问题是SqlConnectionUIControl必须在STA线程中运行。 这是我得到的代码

单击“加载”按钮,在线程中启动数据连接器

private void dataSourceSelectionButton_Click(object sender, EventArgs e)
{
  Thread browseThread = new Thread(promptForConnectionString);
  browseThread.TrySetApartmentState(ApartmentState.STA);
  browseThread.Start();  
}
打开对话框

public string ConnectionString { get; set; }

private void promptForDataConnection()
{
  DataConnectionDialog dataConnection = new DataConnectionDialog();
  DataConnectionConfiguration connectionConfiguration = new DataConnectionConfiguration(null);
  connectionConfiguration.LoadConfiguration(dataConnection);

  if (DataConnectionDialog.Show(dataConnection) == DialogResult.OK)
  {
    connectionConfiguration.SaveConfiguration(dataConnection);

    this.ConnectionString = dataConnection.ConnectionString;
  }
}

如果这不起作用,那就开始吧。

我无法通过以管理员身份运行VS2008来解决这个问题。我通过在Winform项目中禁用“启用Visual Studio宿主进程”选项来解决此问题。

您是否尝试过使用管理员权限运行安装项目?如果您在VS中运行,请关闭VS并将其作为Admin启动。VS作为Admin运行,我只是尝试以Admin的身份重新安装,没有区别:(您使用的是哪个版本的ConnectionUI.dll程序集,您是否引用了安装程序和windows项目中的同一程序集?@ArmenKhachatryan您有机会看到我的答案吗?正确填写连接字符串后,“确定”按钮将启用。)。