2

我正在尝试导入一些配置数据表以使用 SSIS、BIML 和 C# 执行动态暂存。最后,我想初始化表 ImportTable 以在 SSIS 中构建我的暂存环境。它向我抛出以下错误:

“初始化字符串的格式不符合从索引 0 开始的规范。”

我读到它可能与ConnectionString有关。我尝试使用空的ConnectionString,但发生了同样的错误。有人有一个想法如何摆脱错误/有替代解决方案。

感谢您的帮助和最诚挚的问候

我的代码:( 任务可能没有更大的意义)

<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.OleDb" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ template language="C#" tier="2" #>

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

<Connections>
<OleDbConnection Name="Source" 
     ConnectionString="Provider=SQLOLEDB;
               Server=.\MSSQL17;
      Initial Catalog=AdventureWorksDW2014;
  Integrated Security=SSPI;" />
<OleDbConnection Name="Target_Meta" 
     ConnectionString="Provider=SQLOLEDB;
               Server=.\MSSQL17;
      Initial Catalog=BIMLMetaDaten;
  Integrated Security=SSPI;" />    
</Connections>
<#

OleDbDataAdapter ordAdapter = new OleDbDataAdapter("SELECT * FROM 
                              ImportTable", "Target_Meta");
           DataTable ImpTab = new DataTable();
           ordAdapter.Fill(ImpTab, "ImportTable");

#>

<Packages>
    <Package Name="002_Extractions" ConstraintMode="Parallel">
        <Tasks>
            <# foreach (DataRow row in ImpTab.Rows){ #>
            <Container Name="<#= ImpTab.Columns["TableName"] #>" 
             ConstraintMode="Linear">
                <Tasks>
                  <ExecuteSQL Name="truncate <#= ImpTab.Columns 
                     ["TableID"] #>_<#= ImpTab.Columns["TableName"] #>" 
                     ConnectionName="Target_Meta" >
                        <DirectInput>
                         Select 1
                        </DirectInput>
                  </ExecuteSQL>
                  <Dataflow Name="copy <#=  ImpTab.Columns["TableID"] 
                    #>_<#= ImpTab.Columns["TableName"] #>">
                  </Dataflow>
                </Tasks>
            </Container>
            <#} #>
        </Tasks>
    </Package>
    </Packages>
</Biml>
4

1 回答 1

0

我会这样写:

  1. 这是您需要从中获取数据的选择语句 - 对于您的情况,它可能是SELECT * FROM IMPORTTABLE
  2. 将您的字符串更改为您需要的任何内容以及您拥有的任何服务器版本。
  3. 如果它是同一个数据库,您只需要一个连接字符串,否则会创建几个 - 由您决定
  4. 看看这个第一个脚本,它基本相同的Biml 脚本连接和外部数据访问
  <# var metadataConnectionString = 
   "Provider=SQLNCLI11;Server=EGC25199;Integrated Security=SSPI;Initial 
    Catalog=MetaData"; #>

 <# var logConnectionString = "Provider=SQLNCLI11;Server=EGC25199;Integrated 
  Security=SSPI;Initial Catalog=Utility"; #>

<# var metadataSelect = @"
 SELECT * FROM ImportTable";


DataTable dt = ExternalDataAccess.GetDataTable(metadataConnectionString, metadataSelect);
#>

<Connections>
<Connection Name="UTILITY" ConnectionString="<#=logConnectionString #>" 
 CreateInProject="true" />
</Connections>

<Packages> YOUR CODE

之后像你一样使用你的 foreach 。

于 2017-11-09T09:49:13.470 回答