首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Biml中创建连接

无法在Biml中创建连接
EN

Stack Overflow用户
提问于 2022-10-21 17:37:39
回答 1查看 19关注 0票数 0

我刚刚开始使用BIML,我无法创建适当的数据库连接。在下面的示例中--当我调用RootNode.Connections[]时,它会抛出:所提供的连接为null,而RootNode.Connections.Count()为0。

我能够通过使用SchemaManager.CreateConnectionNode (下面代码中的场景2)来解决这个问题,但我想知道在BIML中定义的连接不起作用。

我正在使用VS2019(SQLServerIntegrationServicesProjects3.16),最新的bimlexpress

守则如下:

代码语言:javascript
复制
<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>

返回:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 21:06:55

这是一个层次分明的问题。要能够引用某些内容,需要在前面的步骤(或层)中完成。

静态文件是0层,所以如果您有

代码语言:javascript
复制
<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金块、表达式等)

代码语言:javascript
复制
<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声明,因为它在我们的另一个文件中。

代码语言:javascript
复制
<#@ 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答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74157352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档