【问题标题】:How to write C# script to handle double quotes in csv fields in SSIS如何编写 C# 脚本来处理 SSIS 中 csv 字段中的双引号
【发布时间】:2020-12-07 19:28:10
【问题描述】:

我的要求是获得这样的 CSV 源文件:

ID,[%age],[name]
75,8,"Ander,Pat"

我想从此 csv 创建一个动态 SQL 表,如下所示:

ID,[%age],[name]
75,8,Ander,Pat (this should come in a single column)

问题是我的 C# 代码将 [name] 读取为两个不同的列,即 Ander 和 Pat

因为文件分隔符 = ','

能否请您帮助我应该在 c# 代码中包含什么来处理这个问题?

编辑:这是我的代码:

                string TableName = "";
                int counter = 0;
                string line;
                string ColumnList = "";
        

                System.IO.StreamReader SourceFile =
                new System.IO.StreamReader(fileName);
                while ((line = SourceFile.ReadLine()) != null)
                {
                    if (counter == 0)
                    {
                        ColumnList = "[" + line.Replace(FileDelimiter, "],[") + "]";
                        TableName = (((fileName.Replace(SourceFolderPath, "")).Replace(FileExtension, "")).Replace("\\", ""));
                        string CreateTableStatement = "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[" + SchemaName + "].";
                        CreateTableStatement += "[" + TableName + "]')";
                        CreateTableStatement += " AND type in (N'U'))DROP TABLE [" + SchemaName + "].";
                        CreateTableStatement += "[" + TableName + "]  Create Table " + SchemaName + ".[" + TableName + "]";
                        CreateTableStatement += "([" + line.Replace(FileDelimiter, "] " + ColumnsDataType + ",[") + "] " + ColumnsDataType + ")";
                        SqlCommand CreateTableCmd = new SqlCommand(CreateTableStatement, myADONETConnection);
                        CreateTableCmd.ExecuteNonQuery();

                        

                    }
                    else
                    {
                        string query = "Insert into " + SchemaName + ".[" + TableName + "] (" + ColumnList + ") ";
                        query += "VALUES('" + line.Replace(FileDelimiter, "','") + "')";

【问题讨论】:

  • 你能分享你的代码吗?
  • 这里没有!使用该代码编辑您的问题。
  • 好的,确定。谢谢
  • 嗨@Akif,您在这里找到解决方案了吗?谢谢。
  • TextQualifier 有设置吗?在您的数据中,名称周围有 " ,但是如果您的代码没有说引号是文本限定符(围绕数据并忽略中间的逗号),它将拆分它们。如果您识别文本限定符,它应该可以工作(如果该设置存在于您设置的代码中)

标签: c# csv ssis script-task qualifiers


【解决方案1】:

你需要使用一些库,比如CsvHelper

使用 string.Replace 处理 CSV 文件纯属无稽之谈。

如果您无法安装第 3 方库,不妨试试这个(我没有测试过): StackOverflow Link

var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(file);
parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
parser.SetDelimiters(new string[] { "," });

while (!parser.EndOfData)
{
    string[] row = parser.ReadFields();
    /* do something */
}

【讨论】:

  • 如果我没有安装这样的库的选项怎么办?我主要是从编码角度寻找解决方案
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多