Отображение дополнительных строк в базе данных после импорта в SQL Server - PullRequest
2 голосов
/ 13 мая 2019

Я создаю программу, которая нуждается в следующих функциях:

  • Импорт файла Excel в базу данных - отметьте
  • Избегайте дубликатов --- работайте над этим
  • Проигнорируйте некоторые строки, которые находятся в заголовке файла Excel и в нижней части --- вот что я хочу спросить вас, ребята

Вот мой код

protected void Upload_Click(object sender, EventArgs e)
{
    string excelPath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.PostedFile.FileName);

    string filepath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.FileName);
    string filename = Path.GetFileName(filepath);

    FileUpload1.SaveAs(excelPath);

    string strConnection = @"Data Source=PEDRO-PC\SQLEXPRESS;Initial Catalog=costumizado;Persist Security Info=True;User ID=sa;Password=1234";
    string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO,IMEX=1;\"";

    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
    excelConnection.Open();

    DataTable schema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    string sheetName = schema.Rows[0]["TABLE_NAME"].ToString();

    OleDbCommand cmd = new OleDbCommand("Select * from [" + sheetName + "]", excelConnection);
    OleDbDataReader dReader;
    dReader = cmd.ExecuteReader();

    using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
    {
        sqlBulk.ColumnMappings.Add(0,0);
        sqlBulk.ColumnMappings.Add(1,1);
        sqlBulk.ColumnMappings.Add(2,2);
        sqlBulk.ColumnMappings.Add(3,3);
        sqlBulk.DestinationTableName = "Dados";

        sqlBulk.WriteToServer(dReader);
    }

    excelConnection.Close();
}

И я борюсь за то, что мне нужно, чтобы мой код находил столбцы в Excel и игнорировал строки, которые мне не нужны ...

Я думал, что этих строк достаточно для работы:

sqlBulk.ColumnMappings.Add(0,0);
sqlBulk.ColumnMappings.Add(1,1);
sqlBulk.ColumnMappings.Add(2,2);
sqlBulk.ColumnMappings.Add(3,3);
sqlBulk.DestinationTableName = "Dados";

Вот таблица, которую я хочу импортировать:

Excel tables

1 Ответ

0 голосов
/ 25 мая 2019

Работать с нестабильными исходными файлами сложно. Возможно, попробуйте загрузить файл целиком в необработанную таблицу, а затем после загрузки таблицы вызовите процедуру, чтобы переместить только столбцы, которые соответствуют полной строке, в вашу таблицу prod или final. Например, выбирайте только из необработанных данных, если Data Mov, Valor data, Descricao do Movimento и Valor em EUR не равны нулю. При необходимости вы можете добавить дополнительную проверку, если необходимо, например, проверить первые два столбца для формата даты и последний столбец для числового значения. Я просто думаю, что это может быть проще сделать в SQL, чем в коде .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...