将SQLBulkCopy和IDatareader与ColumnMappings一起使用

时间:2016-08-11 17:31:11

标签: c# asp.net sqlbulkcopy datareader

我想使用DataReader,因为我的文件包含数百万行,而DataTable <{1}}加载速度似乎很慢SQLBulkCopy

我实施了this reader,它会以这种方式读取我的文件:

//snippet from CSVReader implementation
Read(); 
_csvHeaderstring = _csvlinestring;
_header = ReadRow(_csvHeaderstring);
int i = 0;
_csvHeaderstring = "";
foreach (var item in _header)//read each column and create a         dummy header.
{
    headercollection.Add("COL_" + i.ToString(), null);
    _csvHeaderstring = _csvHeaderstring + "COL_" + i.ToString() + _delimiter;
    i++;
}
_csvHeaderstring.TrimEnd(_delimiter);
_header = ReadRow(_csvHeaderstring);
Close(); //close and repoen to get the record position to beginning.
_file = File.OpenText(filePath);


public static void MyMethod()
{
    textDataReader rdr = new textDataReader(file, '\t', false);
    using (SqlBulkCopy bulkcopy = new SqlBulkCopy(connectionString))
    {

        bulkcopy.DestinationTableName = "[dbo].[MyTable]";
        bulkcopy.ColumnMappings.Add("COL_0", "DestinationCol1");
        bulkcopy.ColumnMappings.Add("COL_1", "DestinationCol2");
        bulkcopy.ColumnMappings.Add("COL_3", "DestinationCol3");
        bulkcopy.ColumnMappings.Add("COL_4", "DestinationCol4");
        bulkcopy.ColumnMappings.Add("COL_5", "DestinationCol5");
        bulkcopy.ColumnMappings.Add("COL_6", "DestinationCol6");
        bulkcopy.WriteToServer(rdr);
        bulkcopy.Close();
    }
}

但是,当尝试执行SQLBulkCopy列映射以跳过不必要的列时,我收到错误:

  

给定的列映射与中的任何列都不匹配   来源或目的地。

我还试图将this way映射无效。

IDataReader的此实施是否适用于SQLBulkCopy?我尝试实施一个“忽略”栏目&#39;方法,但没有工作。

0 个答案:

没有答案