Импортируйте данные электронной таблицы в базу данных SQL через приложение MVC. Есть ли способ присвоить значения столбцам, которых нет в электронной таблице во время импорта? - PullRequest
1 голос
/ 07 апреля 2020

Я пишу приложение MVC и в настоящее время работаю над тем, чтобы иметь возможность импортировать данные о сотрудниках из электронной таблицы Excel. У меня есть 2 ненулевых столбца в базе данных, которых нет в файле Excel (сотрудникиestatus - бит, и 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();

Мои поиски приводят меня к кругу примеров, когда все необходимые данные уже есть в электронной таблице.

Если я сначала положу это во временную таблицу, могу ли я тогда установить значения столбцов для всех строк?

Спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

Если ваш 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();
...