如何防止 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 编译器添加不需要的引号和花括号。希望这个答案将来对某人(和我!)有用。
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 编译器添加不需要的引号和花括号。希望这个答案将来对某人(和我!)有用。