c# - 导入到 SQL Server 后显示数据库中的额外行

标签 c# asp.net sql-server excel database

我正在构建一个需要以下功能的程序:

  • 将一个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

最佳答案

处理波动的源文件很棘手。也许尝试将文件作为一个整体加载到原始表中,然后在加载表后调用 proc 以仅将与完整行匹配的列移动到您的产品或最终表。例如,仅从 Data Mov、Data Valor、Descricao do Movimento 和 Valor em EUR 不为空的原始数据中选择。如果需要,您可以根据需要添加更多验证,例如检查前两列的日期格式和最后一列的数值。我只是认为在 SQL 中比在 .NET 代码中更容易做到这一点。

关于c# - 导入到 SQL Server 后显示数据库中的额外行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56108382/

相关文章:

c# - 从另一个类更改一个类的属性

c# - 如何获取RadTreeView的点击节点文本

c# - 异常无法将 nvarchar 转换为 int

asp.net - 如何从asp.net中的母版页访问内容页控件

python - 如何配置 Django 在 MSSQL Server 上运行

sql - 需要一个工具来自动缩进和格式化 SQL Server 存储过程

C#:糟糕的类设计(第一个 OOP)

c# - DomainUpDown(微调器)控件正在切断显示文本的底部像素

c# - 在 C# 中为图像添加颜色

c# - ASP.Net 应用程序因 Web 服务而崩溃