【问题标题】:How to skip first 2 lines and last line when I use BULK INSERT使用 BULK INSERT 时如何跳过前 2 行和最后一行
【发布时间】:2015-04-01 08:34:29
【问题描述】:

您好,我有一个应用程序,用户可以浏览 csv 文件,而 csv 文件中的数据只能使用 BULK INSERT 写入表中

文本文件看起来像这样

Student_head    201501  
student_id  code    amount
1           salb    10015
2           salb    10016
3           salb    10017
4           c100    4000
5           salb    10022
END     

我需要做的是跳过前两行和最后一行。

我应该得到这样的东西:

    1           salb    10015
    2           salb    10016
    3           salb    10017
    4           c100    4000
    5           salb    10022

我已经尝试过这段代码,但似乎什么都没有发生

        openFileDialog1.Filter = ".csv file|*.csv*";
        openFileDialog1.FilterIndex = 1;

        DialogResult result = openFileDialog1.ShowDialog();

        if (result == DialogResult.Yes)
        {
            String file = openFileDialog1.FileName;

            using (var reader = new StreamReader(file))
            {
                string firstLine = reader.ReadLine();
                string[] splitedLine = firstLine.Split(';');
                string month = splitedLine[1];
            }
            try
            { 
                string connect = "Data Source=George-PC\\SQLEXPRESS; Initial Catalog=Students; user id =sa; Password=george1";

                SqlConnection con = new SqlConnection(connect);
                con.Open();

                String BulkInsert = "BULK INSERT t_original FROM" +
                    file + "WITH (FIRSTROW = 3," +
                    "FIELDTERMINATOR = ''," +
                    "MAXERRORS = 0," +
                    "ROWTERMINATOR = '\\n')";
                //"UPDATE t_original"+
                //"SET month =" + month + 
                //"WHERE month is null";

                SqlCommand bulkCmd = new SqlCommand(BulkInsert, con);
                bulkCmd.ExecuteNonQuery();

任何帮助和建议将不胜感激

谢谢

【问题讨论】:

  • 您可以预处理您的文件并删除您不想导入的行吗?
  • @LeeWillis 这就是问题所在,这个应用程序将被很多人使用,并且 csv 文件会有所不同,但里面有更多相同的数据。前 2 行和最后一行应该总是被跳过
  • 你不是已经问过他了吗,有人指出你在 FROM 之后和 WITH 之前缺少一个空格?

标签: c# sql csv


【解决方案1】:

不要使用SqlCommand,而是尝试使用SqlBulkCopy 对象。

类似...

DataTable table = new DataTable();
    //turn your CSV data into a DataTable using your favorite CSV parser.
    //My favorite is [`TextFieldParser`][2].

using SqlBulkCopy copier = new SqlBulkCopy(connectionString,
                  SqlBulkCopyOptions.KeepIdentity Or SqlBulkCopyOptions.KeepNulls) {
    // Now set up your column mappings via SqlBulkCopy.ColumnMappings
    // Choose a destination table with SqlBulkCopy.DestinationTableName

    // execute the copy
    copier.WriteToServer(table);
}

【讨论】:

  • 当我开始阅读TextFieldParser 时,我明白除了BULK INSERT 之外还有另一种方法
  • 谢谢,TextFieldParser 对我来说是新手,但我觉得它很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2015-09-10
  • 2013-12-10
  • 2013-07-25
  • 1970-01-01
相关资源
最近更新 更多