当前上下文中不存在名称“fileName”-BIML

Posted

技术标签:

【中文标题】当前上下文中不存在名称“fileName”-BIML【英文标题】:The name 'fileName' does not exist in the current context - BIML 【发布时间】:2021-07-02 01:00:37 【问题描述】:

我有一个受this post 启发的 BIML 文件。

但是,我收到一个错误:

错误 0 当前上下文中不存在名称“fileName”。 (32,16`)

我觉得我错过了一些非常明显的东西。 我在VS 2019 + SSDTBIML Express 中运行它(目前都是最新版本) 我在说话

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 
    Aug 22 2017 17:04:49 
    Copyright (C) 2017 Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)

这是我的 BIML 代码:

<#@ template language="C#" hostspecific="true"#>
<#@ import namespace="System.IO"#>


<Biml xmlns="http://schemas.varigence.com/biml.xsd">
 
<#  
    string Prefix="import";
     
    // the locatie of the csv's'
    string path = @"C:\test";
    // Put all the filenames with the extension csv in a string array
    string[] myFiles = Directory.GetFiles(path, "*.csv");
    // string that will be filled with the filename
    string filename;
    // string array for columnnames extracted from CSV
    string[] myColumns;
#>
        <Connections>
            <OleDbConnection
            Name="OLEDB_STG_<#=Prefix#>" 
            ConnectionString="Data Source=SQLSERVER;Initial Catalog=TEST;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;">
            </OleDbConnection>
        </Connections>
        <Databases>
             <Database ConnectionName="OLEDB_STG_<#=Prefix#>" Name="TEST"/>
        </Databases>
       <Schemas>
              <Schema Name="dbo" DatabaseName="TEST" Owner="dbo"/>
       </Schemas>
       <Tables>
            <!-- loop trough the array of files-->
            <#  foreach(string filePath in myFiles) 
                
               // extract the filename from the path to use as tablename     
               fileName = Path.GetFileNameWithoutExtension(filePath);
             
            #>
            <Table Name="<#=Prefix#>_<#=fileName#>" SchemaName="TEST.dbo">
                <Columns>
                   <!-- loop trough the file looking for the columnnames-->
                    <#
                    // read first row of csv to extract to columnnames
                    // and split on comma to create an array
                    StreamReader myFile = new StreamReader(filePath);
 
                    myColumns = myFile.ReadLine().Split(',');
                    // close file after reading first line
                    myFile.Close();
 
                    // Loop through column array
                    foreach(string myColumn in myColumns) 
                      
                    #>
                      <Column Name="<#=myColumn#>" DataType="String" Length="255"></Column>
                 <#     #>
                </Columns>    
            </Table>
            <# #>
       </Tables>
</Biml>

【问题讨论】:

逐行读取并以逗号分隔意味着您只能正确读取未加引号的 CSV 文件。 RFC4180 允许 CSV 字段数据包含引号、逗号和换行符。此外,C# 是一种区分大小写的语言,因此 filenamefileName 引用的变量不同。 分隔符将是一个管道,但它是可配置的。我相信这应该解决这个问题。拆分也应该只发生在第一行,并且包含管道的列名确实违反了我们内部已有的一些协议 @AlwaysLearning 你上一条关于区分大小写的评论确实是我忽略的愚蠢的事情!谢谢!把它变成一个答案,我会相信你 【参考方案1】:

与所有 XML 一样,BIML 区分大小写。 包括复数集合在内的所有 Biml 对象都区分大小写。

// string that will be filled with the filename
    string fileName;
 // extract the filename from the path to use as tablename     
               fileName = Path.GetFileNameWithoutExtension(filePath); #>  

【讨论】:

【参考方案2】:

C# 是一种区分大小写的语言,因此 filenamefileName 引用的变量不同,即它们不匹配:

string filename;
fileName = Path.GetFileNameWithoutExtension(filePath);

【讨论】:

以上是关于当前上下文中不存在名称“fileName”-BIML的主要内容,如果未能解决你的问题,请参考以下文章

arcengine显示当前上下文中不存在名称怎么办

CS0103: 当前上下文中不存在名称“DataHelper”

C# 当前上下文中不存在名称“Console”

当前上下文中不存在名称

当前上下文不存在名称

编译器错误消息: CS0103: 当前上下文中不存在名称