3

我一直在研究一个简单的 BIML 解决方案,以开始学习如何使用它。我不断收到一条错误消息:

对于此方法,提供的连接必须是 AstDbConnectionNode 类型。在 Varigence.Biml.Extensions.ExternalDataAccess.GetDatabaseSchema 中:第 0 行

我一直在寻找和尝试不同的解决方案,但还没有找到答案。所以,我转向这里的每个人。我需要另一双眼睛,这样我才能弄清楚我做错了什么。

我的第一个 BIML 文件在我的本地机器上设置了与 World Wide Importers 的连接。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

<#@ template language = "C#" tier="0" #>

<Connections>
<OleDbConnection
    Name="src" 
    ConnectionString="Data Source=localhost\SQL16;Initial Catalog=WorldWideImporters;Provider=SQLNCLI11.1;Integrated Security=SSPI;" 
    CreateInProject = "true">
</OleDbConnection>
</Connections>

<Databases>
    <Database Name="src" ConnectionName = "src" />
</Databases>

第二个 BIML 文件是引发错误的原因

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

<#@ template language = "C#" tier = "1" #>
<#@ import namespace="Varigence.Biml.CoreLowerer.SchemaManagement" #>

<# var srcDB = RootNode.OleDbConnections["src"]; #>
<# var WWIdb = srcDB.GetDatabaseSchema(ImportOptions.ExcludeViews); #>

<Packages>
    <# foreach (var table in WWIdb.TableNodes) { #>
    <Package Name="<#=table.Schema#>_<#=table.Name#>"     ConstraintMode="Linear">
        <Tasks>
            <Dataflow Name="DF Copy <#=table.Name#>">
            </Dataflow>
        </Tasks>
    </Package>
    <# } #>
</Packages>
</Biml>
4

1 回答 1

1

那个,误导,错误表面从调用GetDatabaseSchema我说这是误导,因为根本问题是 srcDB 是空的。通过在您的第二个 Biml 文件中使用此代码来亲自查看。

<#@ import namespace="System.Windows.Forms" #>
<#@ assembly name= "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll" #>
<# var srcDB = RootNode.OleDbConnections["ConnectionDoesNotExist"]; #>
<#
    if (srcDB == null)
    {
        MessageBox.Show("It's null");
    }
    else
    {
        MessageBox.Show("It's not null - {0}", srcDB.Name);
    }
#>

根本问题

您正在访问连接集合中不​​存在的对象 - 可能是因为当您的分层正确时,您需要在构建时“包含”所有文件。

你如何解决这个问题?

如果您使用BimlExpressBIDS Helper,则只需在解决方案菜单中选择 file1.biml 和 file2.biml 并右键单击生成包。

如果您使用的是Mist/BimlStudio,那么我只需右键单击 file1.biml 并将其更改为 Convert to Live BimlScript。

于 2017-02-14T23:02:37.147 回答