通过MVC应用程序将电子表格数据导入SQL数据库,有没有办法在导入期间为不在电子表格上的列分配值?

Posted

技术标签:

【中文标题】通过MVC应用程序将电子表格数据导入SQL数据库,有没有办法在导入期间为不在电子表格上的列分配值?【英文标题】:Import spreadsheet data into SQL database through MVC application, is there a way to assign values for columns not on the spreadsheet during import? 【发布时间】:2020-07-19 23:16:05 【问题描述】:

我正在编写一个 MVC 应用程序,目前正在努力从 Excel 电子表格中导入员工数据。我在数据库中有 2 个非空列,这些列不存在于 excel 文件中(employeestatus - 位和 datecreated - 日期时间)。

在导入其他列时,有没有办法为这些列设置值?如果我在电子表格中为这些字段创建新列并将它们添加到映射中,它会完美运行,但我想避免客户必须这样做。

                //where data gets stored in db
                sqlBulk.DestinationTableName = "Employee";

                //mappings
                sqlBulk.ColumnMappings.Add("ID", "id");
                sqlBulk.ColumnMappings.Add("LastName", "employeelastname");
                sqlBulk.ColumnMappings.Add("FirstName","employeefirstname");
                sqlBulk.ColumnMappings.Add("MI", "employeemi");
                sqlBulk.ColumnMappings.Add("StreetAddress1", "streetaddress");
                sqlBulk.ColumnMappings.Add("City", "employeecity");
                sqlBulk.ColumnMappings.Add("State", "employeestate");
                sqlBulk.ColumnMappings.Add("Zip", "employeezip");
                sqlBulk.ColumnMappings.Add("Payroll", "payroll");
                sqlBulk.ColumnMappings.Add("Salary", "salary");
                sqlBulk.ColumnMappings.Add("POBox", "pobox");
                sqlBulk.ColumnMappings.Add("POBoxCity", "poboxcity");
                sqlBulk.ColumnMappings.Add("POBoxState", "poboxstate");
                sqlBulk.ColumnMappings.Add("Org", "orgcode");

                //write and close connection
                sqlBulk.WriteToServer(dReader);
                excelConnection.Close();

理想情况下,应该是这样的:

sqlBulk.ColumnMapping.Set("status", "1");
sqlBulk.ColumnMapping.Set("empdatecreated") = DateTime.Now();

我的搜索将我带入了一系列示例,其中所有需要的数据都已在电子表格中。

如果我先把它放到一个临时表中,我可以为所有行设置列值吗?

谢谢

【问题讨论】:

dReader的定义是什么?我的第一个想法是修改驱动它的东西,以便它添加一些带有您想要的数据的假列 【参考方案1】:

如果您的 dReader 可能是通过 jet/ace 驱动程序连接到电子表格的数据读取器:

var cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", excelConnStr);
dReader = cmd.ExecuteReader();

您可以将所需的列添加到该 sql 中,以便在阅读器上使用它们:

var cmd = new OleDbCommand("SELECT *, 1 as status, NOW() as empdatecreated FROM [Sheet1$]", excelConnStr);
dReader = cmd.ExecuteReader();

【讨论】:

感谢您的帮助!我不得不使用 DATE() 而不是 NOW(),但使用“1 作为状态,DATE() 作为 empdatecreated”工作完美。再次感谢您!

以上是关于通过MVC应用程序将电子表格数据导入SQL数据库,有没有办法在导入期间为不在电子表格上的列分配值?的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel 电子表格列导入 SQL Server 数据库

如何在导入到 SQL Server 数据库时删除 Excel 电子表格的顶部行

使用java将excel电子表格数据导入MYSQL数据库

在 sql server 2000 中导入 Excel 电子表格

如何将 Excel 电子表格导入 SQL Server?

如何将数据从Excel电子表格导出到Sql Server 2008表