如何防止 BIML Express 引用 ODBC Driver

How can I prevent BIML Express quoting an ODBC Driver

TL;DR

我想阻止 BIML 在创建我的 dtsx 包时用双引号将我的 ODBC driver 括起来。

更多信息

我有一个非常简单的 BIML 文件,如下所示 BIML 代码 header,它连接到复合信息服务器(独联体)。我不认为数据源很重要,但我想我会包括它以防它与 question/problem.

相关

CIS ODBC driver 安装时 driver 名称为 Cisco Information Server 7.0

如下所示,我正确输入了 driver name,但是当 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

Edit 只是为了清楚起见(因为它在原始 post 中缺失)BIML 编译器添加的额外引号意味着 driver 无法识别并执行生成的包会抛出此错误:

Execute SQL Task: Failed to acquire connection "CIS". Connection may not be configured correctly or you may not have the right permissions on this connection.

我有一个可行的解决方案(更多的是解决方法),方法是为 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI 中的 driver 创建一个重复的注册表项,删除 non-alphanumeric 个字符,然后在BIML.

但是,我想知道是否有办法阻止 BIML 编译器在我的 ODBC 周围使用引号 driver。

提前感谢您的任何建议!

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>

ConnectionString="Driver={{{Cisco Information Server 7.0}}};... 是否解决了问题?

我 运行 进入了 Biml 中的另一个问题,其中大括号被扩展为格式化程序,并且 solution is to double up the braces 在 .net 中至少

我有另一个解决方法(而不是创建 ODBC 注册表项的仅包含字母数字的副本)。

不幸的是,@billinkc 的回答没有帮助,因为这与在 C# 字符串中转义大括号有关。

解决方法是创建一个 ADO.NET ODBC 连接,如下所示:

<AdoNetConnection Name="CISADO" Provider="System.Data.Odbc.OdbcConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ConnectionString="Driver=Cisco Information Server 7.0;Server=xxxxxxxxxx;Port=xxxxxxxxxx;Domain=xxxxxxxxxx;dataSource=xxxxxxxxxx;database=xxxxxxxxxx;User=xxxxxxxxxx;Password=xxxxxxxxxx;Encrypt=yes;" />

出于某种原因,BIML 编译器 'likes' 此连接字符串不会尝试将其用引号 and/or 大括号括起来。

我会保留这个问题,因为我真的很希望有人给出答案和解决方案,以防止 BIML 编译器添加不需要的引号和花括号。希望这个答案将来对某人(和我!)有用。