Как импортировать только недавно добавленные строки из обновленной электронной таблицы в приложение SQL DB через MVC? - PullRequest
0 голосов
/ 11 апреля 2020

Существует электронная таблица, используемая для хранения данных до их импорта в базу данных через приложение. После первоначального импорта иногда клиент добавляет строки в конец существующей электронной таблицы и должен поместить их в БД. Есть ли способ импортировать тот же файл, но только выбрать только что добавленные строки?

Я пытался использовать SELECT DISTINCT ... FROM [table_name], но все равно выдает ошибку

Невозможно вставить повторяющееся значение в PK

, так как он выбирает первую строку электронная таблица и она уже есть в БД. Я также пытался использовать

SELECT ... 
FROM [table_name] 
WHERE NOT EXISTS (SELECT Department.orgcode FROM dbo.Department)

, но это выдает ошибку

Невозможно получить доступ к файлу dbo

Вот код, который используется:

// connection string for file
string excelConnectionString = @"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='" + path + "';Extended Properties='Excel 12.0 Xml;IMEX=1'";
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);

// Open connection, retrieve sheet name, close when done
excelConnection.Open();
string tableName = excelConnection.GetSchema("Tables").Rows[0]["TABLE_NAME"].ToString();
excelConnection.Close();

// Selecting headers needed, setting status to active for all, setting date of import as date created
OleDbCommand cmd = new OleDbCommand("SELECT Org, Division, Department, Coordinator3, Coordinator2, Coordinator1, 1 as status, DATE() as deptdatecreated  FROM [" + tableName + "]", excelConnection);

// opening connection
excelConnection.Open();

// reading data
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();

SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["DBNAME"].ConnectionString);

// where data should be stored
sqlBulk.DestinationTableName = "Department";

// mappings
sqlBulk.ColumnMappings.Add("Org", "orgcode");
sqlBulk.ColumnMappings.Add("Coordinator3", "coordinator3");
sqlBulk.ColumnMappings.Add("Coordinator2", "coordinator2");
sqlBulk.ColumnMappings.Add("Coordinator1", "coordinator1");
sqlBulk.ColumnMappings.Add("Division", "division");
sqlBulk.ColumnMappings.Add("Department", "departmentname");
sqlBulk.ColumnMappings.Add("status", "departmentstatus");
sqlBulk.ColumnMappings.Add("deptdatecreated", "departmentdatecreated");

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

ViewBag.Result = "Successfully Imported";
...