TL;DR
我想在创建我的dtsx包时阻止BIML用双引号包装我的ODBC驱动程序 .
More info
我有一个非常简单的BIML文件,如下面的 BIML code Headers 后面所示,它连接到Composite Information Server(CIS) . 如果与问题/问题相关,我不会包括't think the datasource is important, but I thought I' .
安装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
Edit 为了清楚起见(因为原始帖子中缺少)BIML编译器添加的额外引号意味着驱动程序无法识别并且执行生成的包会引发此错误:
执行SQL任务:无法获取连接“CIS” . 可能未正确配置连接,或者您可能无法在此连接上拥有正确的权限 .
我有一个工作解决方案(更多的解决方法),通过在 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
中为驱动程序创建一个重复的注册表项,删除非字母数字字符,然后在BIML中引用它 .
但是,我想知道是否有办法阻止BIML编译器在我的ODBC驱动程序中包装引号 .
在此先感谢您的任何建议!
BIML code
<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>
2 回答
ConnectionString="Driver={{{Cisco Information Server 7.0}}};...
修复了这个问题吗?我在Biml中遇到了另一个问题,其中大括号被扩展为格式化程序,而.net中的solution is to double up the braces至少
我有另一种解决方法(而不是创建ODBC注册表项的仅包含字母数字的副本) .
遗憾的是,@ billinkc的回答没有帮助,因为这与在C#字符串中转义花括号有关 .
解决方法是创建ADO.NET ODBC连接,如下所示:
出于某种原因,BIML编译器“喜欢”此连接字符串,并且不会尝试将其包装在引号和/或花括号中 .
我将问题保持开放,因为我真的希望有人给出答案和解决方案,以防止BIML编译器添加不需要的引号和花括号 . 希望这个答案对未来的某个人(和我!)有用 .