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>