Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка при Bulk copy / 4 сообщений из 4, страница 1 из 1
25.09.2018, 10:38
    #39707502
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при Bulk copy
Выполняю Bulk copy

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
 Using objConnect As New SqlConnection(GetConnectionString)
                objConnect.Open()
                Dim transact As SqlTransaction = objConnect.BeginTransaction()

                If rowCount > 0 Then
                    Using bc As New SqlBulkCopy(objConnect, SqlBulkCopyOptions.Default, transact)

                        With bc
                            .DestinationTableName = "[" + "dbo" + "].[" + strDataBaseTableName + "]"
                            .BulkCopyTimeout = 5000
                            .BatchSize = 100
                            .NotifyAfter = 1000
                        End With

                        AddHandler bc.SqlRowsCopied, New SqlRowsCopiedEventHandler(AddressOf OnSqlRowsCopied)

                        Try
                            Dim isDone As Boolean = False
                            bc.WriteToServer(ds.Tables(0))
                            transact.Commit()

                            isDone = True
                            If isDone Then
                                Me.tslblProgress.Text = "Импорт: " + Me.rowCount.ToString() + "/" + Me.rowCount.ToString() + " строк"
                                MessageBox.Show("Операция импорта выполнена успешно!" & vbCrLf & "вствлено " _
                                                + Me.rowCount.ToString() + " строки.", "Импорт", MessageBoxButtons.OK, MessageBoxIcon.Information)
                                ReLoad()
                            Else
                                Me.tslblProgress.Text = "ОШИБКА: Ошибка чтения и вставки записей!"
                            End If
                        Catch ex As Exception

                            transact.Rollback()
                            'MsgBox(ex.ToString, MsgBoxStyle.Critical, "Ошибка вставки")
                            Dim faultyDataRow As DataRow = ds.Tables(0).Rows(0)
                            errorMessage.AppendFormat("Ошибка: {0}{1}", ex.Message, Environment.NewLine)
                            errorMessage.AppendFormat("№ строки: {0}", Environment.NewLine)
                            'For Each column As DataColumn In ds.Tables(0).Columns
                            '    errorMessage.AppendFormat("" & vbTab & "Column {0} - [{1}]{2}", column.ColumnName, faultyDataRow(column.ColumnName).ToString, Environment.NewLine)
                            'Next

                            MsgBox(errorMessage.ToString, MsgBoxStyle.Critical, "Ошибка вставки")


                        Finally
                            dtr.Close()
                        End Try

                    End Using
                Else
                    Me.tslblProgress.Text = "Ошибка: Нет строк для вставки записей!"
                End If
            End Using



Если импортируемая таблица содержит "правильные" форматы и количество их совпадает с требуемым все гуд, а вот при ошибке возвращает пустую таблицу
Вопрос: почему не отрабатывает transact.Rollback()!??:
Мне необходимо при ошибке вставки не трогать предыдущий импорт!
...
Рейтинг: 0 / 0
27.09.2018, 09:54
    #39709044
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при Bulk copy
Bujhm_C,

ничего не понял

у вас роллбак, значит отмена вставки. почему же таблица должна быть полной?
...
Рейтинг: 0 / 0
27.09.2018, 16:34
    #39709414
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при Bulk copy
Arm79,

При ошибке вставки Rollback() -откатить. Разве не так?

Код: vbnet
1.
2.
3.
4.
5.
 Catch ex As Exception
 transact.Rollback()
 Finally
 dtr.Close()
End Try



А при удачной вставке:
Код: vbnet
1.
2.
3.
4.
Try
 Dim isDone As Boolean = False
bc.WriteToServer(ds.Tables(0))
 transact.Commit()


закрепить transact.Commit()

Что не так?

Попробовать добавить
Код: vbnet
1.
2.
3.
4.
Else
 Me.tslblProgress.Text = "ОШИБКА: Ошибка чтения и вставки записей!"

End If

transact.Commit()? Попробую, но не отрабатывает в другом месте Catch ex As Exception
...
Рейтинг: 0 / 0
27.09.2018, 16:40
    #39709419
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при Bulk copy
Bujhm_C,
тоже непонятен ваш вопрос.
Используйте ООП:

Код: c#
1.
2.
3.
4.
5.
6.
var con = GetConnect();
conn.....старт транзакции
try
   МойМетод(conn)
exception
.....
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка при Bulk copy / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]