2015-05-28 1 views
0

Я работаю над функцией Импорт, у меня есть файл excel, который содержит некоторые данные, которые позже будут отредактированы пользователем, мне удалось выполнить импорт excel с помощью SmartXLS в C# и обновить все данные до базы данных SQL Server, однако я сделал это, чтобы извлечь все данные в файл excel и обновить все строки в таблице SQL, что влияет на производительность, а также обновленные неотредактированные строки.Импортировать измененные данные в Excel в таблицу базы данных

Я хотел бы спросить, есть ли способ получить только измененные ячейки, строки в Excel и обновить соответствующие данные в таблице SQL?

var workbook = new WorkBook(); 
workbook.read(filePath); 
var dataTable = workbook.ExportDataTable(); 
+1

Можете ли вы загрузить в промежуточную таблицу, а затем обновить изменения в БД? - извините, не на 100% уверены, где шея для бутылочки. строки для чтения Excel? вставляя в БД или проверяя, какие строки изменились (если так, где это делается - это между данными в клиентском приложении?) – gordatron

+0

эти вопросы не нуждаются в ответе .. они просто объясняют мое предложение;) – gordatron

+0

Обновлено строки с тех пор? – artm

ответ

1

Просто Scenarion, может быть, это поможет вам понять, что gordatron и я говорил о том:

следующей ситуации: Там приведена таблица «Продукты» которым является центральным местом для хранения информации о продукте и таблицу «Обновленные продукты», структура которой выглядит точно так же, как и таблица «Продукты», но данные могут отличаться. Подумайте о следующем сценарии: вы экспортируете таблицу продуктов, чтобы преуспеть по утрам. весь день вы удаляете, добавляете, обновляете продукты в своей таблице excel. В конце дня вы хотите повторно импортировать данные excel в таблицу «Продукты». Что вам нужно:

  • удалить все записи из «UpdatedProducts»
  • вставки данных из Excel в «UpdatedProducts» (насыпная вставки, если это возможно)
  • обновления «Продукты» стол

Затем заявление о слиянии может выглядеть так:

MERGE Products AS TARGET 
USING UpdatedProducts AS SOURCE 
    ON TARGET.ProductID = SOURCE.ProductID 
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate 
    THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
        TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (ProductID, ProductName, Rate) 
     VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate) 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE 

Что это заявление делает: когда подобрано: существуют данных в обеих таблицах, мы обновляем данные в разделе «Продукты», если ProductName или ставка отличается

КОГДА НЕ Немаловажны TARGET: существуют данных в промежуточной таблице, но не в вашем исходная таблица, добавить их к «Продукты»

КОГДА нЕ Немаловажна ИСТОЧНИК: существует данных в исходной таблице, но не в промежуточной таблице, да будет удален от «Продукты»

большое спасибо http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/ за этот прекрасный пример!

+0

Спасибо, @CeOnSql, это ясный ответ, я мог бы взять то, что вы, ребята, предложили, теперь то, что я делаю, я передам список данных, собранных в файле excel, в SQL под параметрами TVP, но я все еще удивляюсь, как я могу получить данные в TVP (имя продукта, скорость и т. д.) для вставки в таблицу обновленных продуктов –

+0

Или я должен использовать Bulk Insert, но я не знаком с этим подходом –

+0

Я думаю, что самая медленная операция в этом дело в том, чтобы прочитать данные из excel и сохранить их в DataTable на C#. Если вы можете преобразовать Excel в файл csv, то объемная вставка будет легкой. Вот описание того, как сохранить файл xls (x) в csv: http://stackoverflow.com/questions/2536181/is-there-any-simple-way-to-convert-xls-file-to-csv- file-excel и здесь вы можете найти, как навалом вставить этот временный csv: http://stackoverflow.com/questions/19302226/import-excel-to-sql-server-2008 – CeOnSql

 Смежные вопросы

  • Нет связанных вопросов^_^