Odchytnutí chyby SQL Servru   zodpovězená otázka

VB.NET, SQL

Zdravim,

potřeboval bych radu ohledně odchytávání a následného zpracování chyb při ukládání dat z DataGridView komponenty na SQL Server.

Používám následující kód při ukládání dat:

    Me.bsZkusebniZarizeniTestu.EndEdit()

    Try
      'datatable se změnami
      Dim dt As New DataTable
      dt = DsMISS.dtZkusebniZarizeniTestu.GetChanges

      'uložení změn
      If Not dt Is Nothing Then
        taZkusebniZarizeniTestu.Update(dt)

        DsMISS.dtZkusebniZarizeniTestu.AcceptChanges()

        MsgBox("Uložení dokončeno!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Informace")
      End If


    Catch ex As SqlClient.SqlException
      MessageBox.Show(ex.Message + vbCrLf, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error)

    Catch ex As ApplicationException
      MessageBox.Show(ex.Message, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

Problém mám s tím, že pokud dojde k chybě při ukládání změn, tak se uloží všechny záznamy před záznamem, kde vznikla chyba a následující se už neuloží. Jde to nějak ošetřit, abych mohl uživateli vrátit informaci, že při ukládání záznamů došlo u záznamu XY k chybě a že nebyl uložen? (a ostatní záznamy byly uloženy - i ty následující).

Děkuji za odpovědi

Petr Š.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud použijete k aktualizaci dat v databázi DataAdapter, tak ten má metodu Update(ByVal System.Data.DataSet) As Integer, která vrací počet aktualizovaných řádků. Pomocí jeho vlastnosti ContinueUpdateOnError lze nastavit, jestli se má pokračovat v aktualizaci při vzniku chyby nebo vyhodit vyjímku. Tento postup se mi ale vůbec nelíbí, protože to může narušit integritu dat v databázi (zapíše se jenom něco). Nejlepší by bylo aktualizovat data pomocí transakce, kde se buď všechno korektně zapíše, nebo se nezapíše nic při vzniku chyby.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nebo mě ještě napadl tento postup:

1.) z DataTablu vytáhnout změny GetChanges

2.) vybrat si postupně nové, změněné a smazané záznamy z ChetChanges

3.) aktualizovat záznamy po jednom na SQL Servru (přes TableAdapter) a odchytávat výsledky

Nebo je nějaký jiný doporučený postup ukládání dat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych také doporučoval využít uloženou proceduru na SQL serveru. Pokud se to budete snažit takto obejít, dá vám mnohem více práce zjistit co se aktualizovalo a co ne než provedení samotného update.

Nebo máte nějáký zásadní důvod proč uloženou proceduru nevyužít?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zásadní důvod nemám. Ale na VB.NET přecházím z MS Accessu a tam jsem se o to "starat" nemusel. Uložené procedury jsem nikdy moc nepoužíval. Beru to spíše tak, že bych to chtěl ošetřovat na straně aplikace.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Silně doporučuji ošetřovat na straně databáze pomocí uložených procedur, protože při případných změnách není nutná rekompilace aplikace (upraví se pouze uložené procedury v SQL Serveru).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A navíc, v uložené proceduře je možné na serveru páchat věci, které uz klienta skoro ani nejdou. Například chybové řádky automaticky nasypat do nějaké tabulky apod.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

OK, zkusím se tedy podívat na ty uložené procedury.

Díky všem.

Petr Š.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback