我刚刚开始使用BIML,我无法创建适当的数据库连接。在下面的示例中--当我调用RootNode.Connections[]时,它会抛出:所提供的连接为null,而RootNode.Connections.Count()为0。
我能够通过使用SchemaManager.CreateConnectionNode (下面代码中的场景2)来解决这个问题,但我想知道在BIML中定义的连接不起作用。
我正在使用VS2019(SQLServerIntegrationServicesProjects3.16),最新的bimlexpress
守则如下:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection Name="POC_BIML_1" ConnectionString="Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;"/>
</Connections>
<!-- Scenario 1: RootNode.Connections -->
<# var sourceConnection1 = RootNode.DbConnections["POC_BIML_1"];
if (sourceConnection1 == null ) { #>
<!--sourceConnection1 is null. RootNode.Connections.Count = <#=RootNode.Connections.Count() #> -->
<#}
else {
var sourceMetadata1 = sourceConnection1.GetDatabaseSchema();
foreach (var table in sourceMetadata1.TableNodes) { #>
<!-- <#=table.Name#>" -->!
<# }
}#>
<!-- Scenario 2: SchemaManager.CreateConnectionNode -->
<# var sourceConnection2 = SchemaManager.CreateConnectionNode("POC_BIML_2", @"Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;");
var sourceMetadata2 = sourceConnection2.GetDatabaseSchema();
foreach (var table in sourceMetadata2.TableNodes) { #>
<!--<#=table.Name#>"-->!
<#} #>
</Biml>返回:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection Name="POC_BIML_1" ConnectionString="Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;"/>
</Connections>
<!-- Scenario 1: RootNode.Connections -->
<!--sourceConnection1 is null. RootNode.Connections.Count = 0 -->
<!-- Scenario 2: SchemaManager.CreateConnectionNode -->
<!--care_provider_import_histories"-->!
<!--care_provider_metrics"-->!
<!--care_providers"-->!
<!--care_services"-->!
</Biml>发布于 2022-10-21 21:06:55
这是一个层次分明的问题。要能够引用某些内容,需要在前面的步骤(或层)中完成。
静态文件是0层,所以如果您有
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection Name="POC_BIML_1" ConnectionString="Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;"/>
</Connections>
</Biml>坐在0_Connections.biml中,这将是第0层,因为那里没有动态代码(没有Biml金块、表达式等)
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection Name="POC_BIML_<#=1#>" ConnectionString="Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;"/>
</Connections>
</Biml>现在,“相同”文件有了一个构建Name属性的表达式。这现在是一个动态脚本和第1层,除非您另有说明。
这是我对一个层的明确,以防您需要额外的层。请注意,我已经删除了Connections声明,因为它在我们的另一个文件中。
<#@ template tier="10" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<!-- Scenario 1: RootNode.Connections -->
<# var sourceConnection1 = RootNode.DbConnections["POC_BIML_1"];
if (sourceConnection1 == null ) { #>
<!--sourceConnection1 is null. RootNode.Connections.Count = <#=RootNode.Connections.Count() #> -->
<#}
else {
var sourceMetadata1 = sourceConnection1.GetDatabaseSchema();
foreach (var table in sourceMetadata1.TableNodes) { #>
<!-- <#=table.Name#>" -->!
<# }
}#>
<!-- Scenario 2: SchemaManager.CreateConnectionNode -->
<# var sourceConnection2 = SchemaManager.CreateConnectionNode("POC_BIML_2", @"Data Source=.;Initial Catalog=POC_BIML;Provider=SQLNCLI11;Integrated Security=SSPI;");
var sourceMetadata2 = sourceConnection2.GetDatabaseSchema();
foreach (var table in sourceMetadata2.TableNodes) { #>
<!--<#=table.Name#>"-->!
<#} #>
</Biml>将其保存为10_Demo.biml
现在的“诀窍”是,在Visual中,您需要按住控制键并选择每个Biml文件,然后右击并生成SSIS包。
https://stackoverflow.com/search?tab=newest&q=user%3a181965%20%5bbiml%5d%20tier中有分层的各种Biml答案
https://stackoverflow.com/questions/74157352
复制相似问题