datatable cuts columnsize

本文关键字:columnsize cuts datatable | 更新日期: 2023-09-27 17:54:15

我有一个巨大的csv-File,我想上传到一个db2表中。唯一的问题是,它切割了列,所以我甚至没有把一半的列放入数据表中。我知道我可以手动添加列,但是没有其他方法可以这样做吗?

    static DataTable GetDataTableFromCsv(string path, string csvSelection, bool isFirstRowHeader)
    {
        string header = isFirstRowHeader ? "Yes" : "No";

        string pathOnly = Path.GetDirectoryName(path);
        string fileName = Path.GetFileName(path);
        //string sql = @"SELECT " + csvSelection + " FROM [" + fileName + "];";
        string sql = @"SELECT * FROM [" +  fileName  + "];";
        using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties='"Text;HDR=" + header + "'""))
        using (OleDbCommand command = new OleDbCommand(sql, connection))
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            DataTable dataTable = new DataTable();
            dataTable.Locale = CultureInfo.CurrentCulture;
            adapter.Fill(dataTable);
            writeSchema(dataTable.Columns[0].ToString(), pathOnly, fileName);
            return dataTable;
        }
    }

datatable cuts columnsize

我必须"手动"添加列

private static List<string> getHeader(string fileName)
                {
                    string fullpath = @ImportPath + "''" + fileName;
                    List<string> header = new List<string>();
                    var reader = new StreamReader(File.OpenRead(fullpath));
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        var values = line.Split(';');
                        foreach (var spalte in values)
                        {
                            header.Add(spalte);
                        }
                        reader.Close();
                        return header;
                    }
                    return null;
                }
    static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader, string csvSelection)
            {
                string header= isFirstRowHeader ? "Yes" : "No";
                string pathOnly = Path.GetDirectoryName(path);
                string fileName = Path.GetFileName(path);
                List<string> headerList = getHeader(fileName);
                string sql = @"SELECT " + "*" + " FROM [" + fileName + "]";
                //string sql = @"SELECT * FROM [" +  fileName  + "];";
                using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties='"Text;HDR=" + headerList + ";FMT=Delimited(;)'""))
                using (OleDbCommand command = new OleDbCommand(sql, connection))
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    DataTable dataTable = new DataTable();
                    dataTable.Locale = CultureInfo.CurrentCulture;
                    foreach (var item in headerList)
                    {
                        dataTable.Columns.Add(item);
                    }
                    adapter.Fill(dataTable);
                    writeSchema(dataTable.Columns, pathOnly, fileName);
                    return dataTable;
                }
            }