Ошибка источника данных WiX ODBC. Ошибка ODBC 8: неверная пара ключевое слово-значение - PullRequest
2 голосов
/ 10 декабря 2011

Я пытаюсь установить имя источника данных (DSN) для базы данных SQL Server 2008 R2 во время процесса установки, используя установщик Windows XML (WiX) для установки на компьютере с Windows 7. Я устанавливаю два встроенных условия безопасности в диалоговом окне, и моя проблема - одно, терпит неудачу. Аутентификация Windows (INTEGRATEDSECURITY = «Да») работает правильно и без ошибок. Проверка подлинности SQL Server (INTEGRATEDSECURITY = «Нет») завершается ошибкой для имени пользователя и пароля SQL. По крайней мере, так считается, поскольку имя SQL Server и имя базы данных работают как шарм с аутентификацией Windows. Я надеюсь, что у кого-то найдется решение, которое не потребует от меня использования сторонних расширений для создания правильного подключения ODBC DSN к базе данных с использованием аутентификации SQL Server.

Ошибка при установке по ошибочному пути:

«Ошибка при настройке источника данных 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_Title}Specify 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 Ответ

3 голосов
/ 26 ноября 2012

У меня та же ошибка ... В некоторых исследованиях я думаю, что это связано с тем, что uid и pwd не поддерживаются для соединений SQL из-за безопасности.Это заставляет меня думать, что соединение ODBC должно быть настроено с помощью настраиваемого действия, а не ODBCDataSource ...

...