"současné" čtení a zápis dat do databáze   otázka

ASP.NET WebForms

Dobrý den,

potřebuji vyčítat hodnoty z databáze, zpracovat je a pak informace o zpracování zapsat do databáze( log ). Je nutné to dělat v cyklu postupem - načtení hodnoty z databáze,zpracování , insert informace o zpracování do databáze do tabulky s logy , přechod na nový řádek.

Ke čtení používám objekt DataReader, problém však nastane, když v cyklu ( kdy je objektu Command již přidružený objekt DataReader ) chci udělat zápis pomocí metody ExecuteNonQuery.

Dim sqlCommand As String = _

"SELECT .........."

Dim sqlQuery As String = "INSERT INTO ......)"

sqlQuery += " VALUES (@.... )"

'vytvoření připojení k databázi

Using con As New SqlConnection(connStr)

Using com As New SqlCommand(sqlCommand, con)

con.Open()

Dim DataReader As SqlDataReader = com.ExecuteReader()

Do While DataReader.Read()

'....načtení a zpracování hodnoty

'insert do db .. zde je problém - takto to samozřejmě nejde

Using dataCommand As New SqlCommand(sqlQuery, con)

dataCommand.Parameters.AddWithValue("status", txtstatus)

dataCommand.ExecuteNonQuery()

End Using

Loop

End Using

End Using

End Using

Napadají mne postupy kdy využiji nejprve načtení tabulky z databáze do DataSet ( tabulka nebude nijak velká ) a pak je budu zpracovávat v tom cyklu, nebo obráceně nějak postupně načítat data jak je navrženo a informace o zpracování v rámci cyklu hrnout do DataSet a po uzavření cyklu DataSet uložit.Uvítám informace zda lze postup nějak upravit, nebo vede cesta přes DataSet. Jak využívat programově DataSet také zatím nevím.

Děkuji za rady

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

Bud jsem nepochopil co chcete udělat nebo proč neuděláte jednoduché:

1.Načíst požadovaná data do nějaké kolekce

2.Provést z daty co je třeba

3.Uložit výsledek/status do DB

Tři samostatné kroky.

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

Nebyl by nějaký příklad, nebo odkaz jak načítat např. hodnoty do nějaké kolekce ( insert ) a pak je z ní uložit do databáze ?

Nyní laboruji s DataSet - při insertu hodnot mi to píše Metoda Update nenalezla element TableMapping ani objekt DataTable.

Díky

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

Najprv načítate hodnoty SQL príkazom SELECT a SqlDataReaderom do kolekcie, ukončíte spojenie s DB , urobíte zmeny, znovu otvoríte spojenie s DB, a zapíšete zmeny pomocou INSERT, UPDATE a iných.

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

Díky

V principu rozumím.

Nějaký příklad by nebyl ( např. odkaz na podobný postup ) - načtení dat do kolekce ( ev. zpracování dat z kolekce v cyklu ) a pak insert do databáze z kolekce ?

Díky ( na příkladech se člověk nejlépe učí ).

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

http://stackoverflow.com/questions/32011...

Potrebujete štruktúru zodpovedajúcemu jednému riadku, a jej kolekciu. Dáta z DB načítate SQL príkazom SELECT( nie INSERT) a pomocou .ExecuteReader() .

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

Radíte tedy plnit data do nějakého pole ( ArrayList ), nebo do DataSetu ?

Samozřejmě nechci načítat insertem data ale jak jsem psal- načíst řádek , data zpracovat - výsledek uložit do jiné tabulky v databázi - tady jsem mluvil o tom insertu - přejít na další řádek a znovu data načíst atd.)

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

Ja by som dáta plnil do System.Collections.Generic.List . A najprv načítajte všetko do Listu, potom spracujte všetky dáta naraz , a znovu všetko uložiť naraz. Takže nie "přejít na další řádek a znovu data načíst atd.)", ale naraz načítať, naraz spracovať, naraz uložiť.

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

To nejde - v rámci zpracování je i komunikace s jiným systémem, kterému pošlu data a on vrátí informaci pod jakým id je přijal - to id pak musím párovat s daty, které posílám - proto nejde data posílat najednou ale po "řádcích" - to je ten cyklus. Z pole a do pole ( nebo přímo do databáze ) musím data z proměnných číst a zapisovat zlášť.

V čem je List vhodnější pro toto použití než DataSet ?

Díky za vaše odpovědi.

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

Čo myslíte tým iným serverom ?

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

Myslíte ten externí systém. Regulátor, kterému pošlu informaci ( jednotlivě ) a on vrátí status plus id pod kterým to přijal. To id a status chci v tom cyklu načítat do nějakého pole, nebo do databáze.

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

Ja by som naraz načítal všetko z DB do Listu, ukončím spojenie s DB. Následne poslať regulátoru informácie(ak je to nutné), tak riadok po riadku, inak dávkovo(všetko naraz). A potom znovu otvoriť spojenie s DB všetko zapísať do DB, opäť naraz, a finálne znovu ukončiť spojenie s DB.

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

Díky za rady. Nechci vas bombardovat stále stejnou otázkou ale v čem je použití Listu vhodnější než DataSet ?

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

Nuž nie som do DB expert, ale ja to vidím tak, že DataSet je zložitejšia komponenta, a niekedy je to teda "kaňón na vrabca".

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