WiX ODBC 数据源错误。 ODBC 错误 8:无效的关键字-值对

Posted

技术标签:

【中文标题】WiX ODBC 数据源错误。 ODBC 错误 8:无效的关键字-值对【英文标题】:WiX ODBC data source error. ODBC error 8: Invalid keyword-value pair 【发布时间】:2011-12-09 21:12:16 【问题描述】:

我正在尝试在安装过程中使用 Windows Installer XML (WiX) 为 SQL Server 2008 R2 数据库建立数据源名称 (DSN) 以在 Windows 7 计算机上进行安装。我在一个对话窗口中设置了两个集成的安全条件,我的问题是一个失败。 Windows 身份验证 (INTEGRATEDSECURITY = “Yes”) 工作正常且没有错误。 SQL Server 身份验证 (INTEGRATEDSECURITY = “No”) 在 SQL 用户名和密码上失败。至少它是这样认为的,因为 SQL Server 名称和数据库名称就像 Windows 身份验证的魅力一样。我希望有人能提供不需要我使用第三方扩展来使用 SQL Server 身份验证创建与数据库的正确 ODBC DSN 连接的解决方案。

在失败路径上安装期间的错误为:

“配置 ODBC 数据源时出错:DB_Test,ODBC 错误 8:无效的关键字-值对。验证文件 DB_Test 是否存在并且您可以访问它。”

ODBC数据源如下:

<Component Id="DB_Test_DSN_SSPI" Guid="******">
  <Condition>INTEGRATEDSECURITY = "Yes"</Condition>
    <ODBCDataSource Id="DB_Test_DSN_SSPI" Name="DB_Test $(var.DisplayVersion)" DriverName="SQL Server" KeyPath="yes" Registration="machine">
      <Property Id="Server" Value="[SERVERNAME]" />
      <Property Id="Database" Value="[DATABASENAME]" />
      <Property Id="Description" Value="DB_Test" />
      <Property Id="Trusted_Connection" Value="[INTEGRATEDSECURITY]" />
    </ODBCDataSource>
</Component>
<Component Id="DB_Test_DSN_SQLAUTH" Guid="*****">
  <Condition>INTEGRATEDSECURITY = "No"</Condition>
    <ODBCDataSource Id="DB_Test_DSNSQLAUTH" Name="DB_Test $(var.DisplayVersion)" DriverName="SQL Server" KeyPath="yes" Registration="machine">
      <Property Id="Server" Value="[SERVERNAME]" />
      <Property Id="Database" Value="[DATABASENAME]" />
      <Property Id="Description" Value="DB_Test" />
      <Property Id="Trusted_Connection" Value="[INTEGRATEDSECURITY]" />
      <Property Id="uid" Value="[DATABASEUSER]" />
      <Property Id="pwd" Value="[DATABASEPASS]" />
    </ODBCDataSource>
</Component>

自定义对话框界面如下:

<Dialog Id="DialogDatabase" Width="370" Height="270" Title="$(var.ProductName) Setup">      
   <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="\WixUI_Font_TitleSpecify Database" />
   <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="Specify the location of the DB_Test" />

   <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.InstallDirDlgBannerBitmap)" />
   <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
   <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />

   <Control Id="ServerNameLabel" Type="Text" X="32" Y="54" Width="290" Height="13" NoPrefix="yes" Text="SQL Server (Hostname\Instance,Port):" />
   <Control Id="ServerNameEdit" Type="Edit" X="32" Y="66" Width="290" Height="18" Property="SERVERNAME" />

   <Control Id="DatabaseNameLabel" Type="Text" X="32" Y="88" Width="290" Height="13" NoPrefix="yes" Text="Database name:" />
   <Control Id="DatabaseNameEdit" Type="Edit" X="32" Y="100" Width="290" Height="18" Property="DATABASENAME" />

   <Control Id="INTEGRATEDSECURITY" Type="RadioButtonGroup" X="32" Y="124" Width="290" Height="28" HasBorder="yes" Property="INTEGRATEDSECURITY" Text="Select Authentication Method">
      <RadioButtonGroup Property="INTEGRATEDSECURITY">
         <RadioButton Value="Yes" X="8" Y="12" Width="130" Height="10" Text="Windows Authentication" />
         <RadioButton Value="No" X="150" Y="12" Width="130" Height="10" Text="SQL Server Authentication" />
      </RadioButtonGroup>
   </Control>

   <Control Id="DatabaseUserLabel" Type="Text" Hidden="yes" X="32" Y="158" Width="290" Height="13" NoPrefix="yes" Text="SQL Username:">
      <Condition Action="show"><![CDATA[INTEGRATEDSECURITY = "No"]]></Condition>
      <Condition Action="hide"><![CDATA[INTEGRATEDSECURITY = "Yes"]]></Condition>
   </Control>
   <Control Id="DatabaseUserEdit" Type="Edit" Hidden="yes" X="32" Y="170" Width="290" Height="18" Property="DATABASEUSER">
      <Condition Action="show"><![CDATA[INTEGRATEDSECURITY = "No"]]></Condition>
      <Condition Action="hide"><![CDATA[INTEGRATEDSECURITY = "Yes"]]></Condition>
   </Control>

   <Control Id="DatabasePassLabel" Type="Text" Hidden="yes" X="32" Y="192" Width="290" Height="13" NoPrefix="yes" Text="SQL Password:">
      <Condition Action="show"><![CDATA[INTEGRATEDSECURITY = "No"]]></Condition>
      <Condition Action="hide"><![CDATA[INTEGRATEDSECURITY = "Yes"]]></Condition>
   </Control>
   <Control Id="DatabasePassEdit" Type="Edit" Hidden="yes" X="32" Y="204" Width="290" Height="18" Property="DATABASEPASS" Password="yes">
      <Condition Action="show"><![CDATA[INTEGRATEDSECURITY = "No"]]></Condition>
      <Condition Action="hide"><![CDATA[INTEGRATEDSECURITY = "Yes"]]></Condition>
   </Control>

   <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
      <!--<Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>-->
   </Control>
   <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
      <!--<Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>-->
   </Control>
   <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
      <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
   </Control>
</Dialog>

感谢大家帮助我解决这个问题!

【问题讨论】:

【参考方案1】:

我有同样的错误...通过一些研究,我认为这与由于安全原因不支持 SQL 连接的 uid 和 pwd 有关。这让我觉得需要通过自定义操作而不是 ODBCDataSource 来设置 ODBC 连接...

【讨论】:

我们一直认为这是出于安全原因。他们最终走了一条不同的路线,但自从我离开那个项目后,我对结果并不熟悉。再次感谢您。

以上是关于WiX ODBC 数据源错误。 ODBC 错误 8:无效的关键字-值对的主要内容,如果未能解决你的问题,请参考以下文章

Redshift ODBC 错误

ODBC错误连接到SQL数据库

ODBC 调用失败 - 错误 3151

Excel ODBC SQL 语句抛出错误'[ODBC EXCEL 驱动程序] 条件中的数据类型不匹配

c#用odbc连接mysql报错

连接到 ODBC 时出现 MS Access 错误