2

TL;博士

我想防止 BIML 在创建我的 dtsx 包时将我的 ODBC 驱动程序用双引号括起来。

更多信息

我有一个非常简单的 BIML 文件,如下所示,在BIML 代码头之后,它连接到复合信息服务器 (CIS)。我不认为数据源很重要,但我想我会包括它以防它与问题/问题相关。

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>
4

2 回答 2

1

ConnectionString="Driver={{{Cisco Information Server 7.0}}};...能解决问题吗?

我在 Biml 中遇到了另一个问题,其中大括号被扩展为格式化程序,解决方案是至少在 .net中将大括号加倍

于 2017-03-09T18:46:47.930 回答
1

我有另一种解决方法(而不是创建 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 编译器“喜欢”此连接字符串,并且不会尝试将其包含在引号和/或花括号中。

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

于 2017-03-10T08:26:38.187 回答