TL;DR
BIML で dtsx パッケージを作成するときに、ODBC ドライバーが二重引用符で囲まれないようにしたいと考えています。
より詳しい情報
複合情報サーバー (CIS) に接続するBIML コードヘッダーの後に示す、非常に単純な BIML ファイルがあります。データソースは重要ではないと思いますが、質問/問題に関連する場合に備えて含めると思いました.
CIS ODBC ドライバーは、 というドライバー名でインストールされCisco Information Server 7.0
ます。
以下のように、ドライバー名を正しく入力していますが、BIML が dtsx パッケージを生成するときに、名前が引用符で囲まれるため、次のような接続の場合:
<OdbcConnection Name="CIS" ConnectionString="Driver={Cisco Information Server 7.0};Server=xxxxxxxxxx;Port=xxxxxxxxxx;Domain=xxxxxxxxxx;dataSource=xxxxxxxxxx;database=src;User=xxxxxxxxxx;Password=xxxxxxxxxx;Encrypt=yes;" />
...次のような接続文字列になります。
Driver={"{Cisco Information Server 7.0}}"};server=xxxxxxxxxx;port=xxxxxxxxxx;domain=xxxxxxxxxx;datasource=xxxxxxxxxx;database=xxxxxxxxxx;user=xxxxxxxxxx;encrypt=yes
中括弧を削除して、次のような接続文字列を使用すると:
<OdbcConnection Name="CIS" ConnectionString="Driver=Cisco Information Server 7.0;Server=xxxxxxxxxx;Port=xxxxxxxxxx;Domain=xxxxxxxxxx;dataSource=xxxxxxxxxx;database=src;User=xxxxxxxxxx;Password=xxxxxxxxxx;Encrypt=yes;" />
...私はまだこのような接続文字列になってしまいます:
Driver={"Cisco Information Server 7.0"};server=xxxxxxxxxx;port=xxxxxxxxxx;domain=xxxxxxxxxx;datasource=xxxxxxxxxx;database=xxxxxxxxxx;user=xxxxxxxxxx;encrypt=yes
編集わかりやすくするために (元の投稿から欠落していたため)、BIML コンパイラによって追加された余分な引用符は、ドライバーが認識されず、生成されたパッケージを実行すると、次のエラーがスローされることを意味します。
SQL タスクの実行: 接続 "CIS" の取得に失敗しました。接続が正しく構成されていないか、この接続に対する適切な権限がない可能性があります。
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
でドライバーの重複したレジストリエントリを作成し、英数字以外の文字を削除してから、BIML でこれを参照することにより、有効な解決策 (より回避策) があります。
ただし、BIML コンパイラが ODBC ドライバーの周りに引用符をラップするのを止める方法があるかどうかを知りたいです。
提案をお寄せいただきありがとうございます!
BIML コード
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OdbcConnection Name="CIS" ConnectionString="Driver={Cisco Information Server 7.0};Server=xxxxxxxxxx;Port=xxxxxxxxxx;Domain=xxxxxxxxxx;dataSource=xxxxxxxxxx;database=src;User=xxxxxxxxxx;Password=xxxxxxxxxx;Encrypt=yes;" />
</Connections>
<Packages>
<Package Name="TestPackage" ConstraintMode="Parallel" ProtectionLevel="EncryptSensitiveWithUserKey" DelayValidation="true">
<Variables>
<Variable Name="TestResult" DataType="Int32">0</Variable>
</Variables>
<Tasks>
<ExecuteSQL Name="ConnectionTest" ConnectionName="CIS" ResultSet="SingleRow">
<DirectInput>SELECT COUNT(*) FROM SCHEMA.TABLE</DirectInput>
<Results>
<Result Name="1" VariableName="User.TestResult" />
<!-- ODBC requires a 1-based param number -->
</Results>
</ExecuteSQL>
</Tasks>
</Package>
</Packages>
</Biml>