c# - 是否可以不指定工作表名称和列?

标签 c# asp.net sql-server excel

所以,我正在做一个程序,它将一个 excel 文件导入到 sql 数据库,如果我指定 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 ext = Path.GetExtension(filename);

    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;HRD=YES;IMEX=1;\"";

    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);

    OleDbCommand cmd = new OleDbCommand("Select * from [rptListaMovs_4$]", excelConnection);

    excelConnection.Open();

    cmd.ExecuteNonQuery();

    DataSet ds = new DataSet();

    SqlDataAdapter da = new SqlDataAdapter("Select * from [rptListaMovs_4$] ", strConnection);

    OleDbDataReader dReader;
    dReader = cmd.ExecuteReader();

    using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
    {
        sqlBulk.DestinationTableName = "Dados";
        sqlBulk.ColumnMappings.Add("Data Mov", "Data Mov.");
        sqlBulk.ColumnMappings.Add("Data Valor", "Data Valor");
        sqlBulk.ColumnMappings.Add("Descrição do Movimento", "Descrição do Movimento");
        sqlBulk.ColumnMappings.Add("Valor em EUR", "Valor em EUR");

        sqlBulk.WriteToServer(dReader);
    }

    excelConnection.Close();
}

Insted of This:“Select * from [rptListaMovs_4$]”

我想要这个:"Select * from ["+SheetNameWithoutCopyPastHisName+"]"

并安装了这个

sqlBulk.ColumnMappings.Add("Data Mov", "Data Mov.");
sqlBulk.ColumnMappings.Add("Data Valor", "Data Valor");
sqlBulk.ColumnMappings.Add("Descrição do Movimento", "Descrição do Movimento");
sqlBulk.ColumnMappings.Add("Valor em EUR", "Valor em EUR");

我想要一些东西,不需要输入列名,因为有时我想导入一个具有不同架构的 excel 而它不允许我

最佳答案

你应该能够得到第一个工作表名称:

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

至于字段名称,这应该可以解决问题:

for(int i = 0; i < dReader.FieldCount; i++)
{
    sqlBulk.ColumnMappings.Add(dReader.GetName(i), dReader.GetName(i));
}

关于c# - 是否可以不指定工作表名称和列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56059081/

相关文章:

asp.net - Windows 身份验证和 session 超时

asp.net - 将对象集合作为参数传递到SQL Server存储过程

c# - 如何使用 XUnit 测试方法参数类型交错数组

c# - System.Timers.Timer Elapsed 在使用 Task.Run with async from Console App 时间歇性地不触发

c# - 如何在 ASP.NET MVC 中显示具有相同 ID 的所有行?

asp.net - 如何在 ASP.NET 中将文件路径转换为 ​​URL

c# - 使用C#/.Net Core签署Powershell脚本

JavaScript:确定哪个控件导致回发

c# - 使用 SQL WHERE IN 从 CheckboxList 中检索多个值

c# - 有没有办法将数据从 excel 表导入到 SQL Server 数据库中?