Я хочу импортировать данные из Excel в базу данных с помощью EPPLUS. Отсюда я взял код: https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt6db.SaveChanges() в цикле не сохраняет записи после ошибки
using (var db = new DbEntities())
{
for (var row = 2; row <= lastRow; row++)
{
var newRecord = new DB_USER
{
ID = Int32.Parse(worksheet.Cells[idColumn + row].Value.ToString()),
FIRST_NAME = worksheet.Cells[firstNameColumn + row].Value.ToString(),
LAST_NAME = worksheet.Cells[lastNameColumn + row].Value.ToString(),
};
db.DB_USER.Add(newRecord);
try
{
db.SaveChanges();
totalImported++;
}
catch (Exception ex)
{
resultMessages.Add(string.Format("Error in line #{0}: {1}\n", row,
ex.Message));
}
}
}
Все отлично работает, если данные в Excel являются правильными. Проблема в том, что какая-либо запись имеет неверные данные. Например, у нас есть 3 записей в Excel:
- ID: 21 (ID не в базе) | ПЕРВОЕ ИМЯ: Джон | ПОСЛЕДНИЕ ИМЯ: Кейдж
- ID: 1 (ID в базе) | ПЕРВОЕ ИМЯ: Мэй | ПОСЛЕДНИЕ ИМЯ: Синий
- ID: 25 (ID не в базе) | ПЕРВОЕ ИМЯ: Ник | ПОСЛЕДНИЕ ИМЯ: Siri
И в базе данных уже есть запись с ID = 1
. Итак, 1-й и 3-й должны сэкономить, но 2-й не должен. Проблема в том, что сохраняется только первая запись, остальные (2-й и 3-й) получат ошибку. Я не знаю почему? Может быть, потому что это одна транзакция или что? Это странно. Может ли кто-нибудь сказать мне, что мне делать, чтобы сохранить 1-й и 3-й записи? Не только 1-й в этом случае?
Ошибка:
ORA-00001: unique constraint primary key violated
, что не имеет никакого смысла в 3-й записи ...
В частности, какую ошибку вы получаете? Мы не можем вам помочь, если вы оставите критическую информацию. – mason
@mason, Edited, теперь вы можете увидеть сообщение об ошибке, но до сих пор нет смысла – DiPix
@DiPix: Вы получили эту работу? –