Существует электронная таблица, используемая для хранения данных до их импорта в базу данных через приложение. После первоначального импорта иногда клиент добавляет строки в конец существующей электронной таблицы и должен поместить их в БД. Есть ли способ импортировать тот же файл, но только выбрать только что добавленные строки?
Я пытался использовать 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";