Čtení dat z databáze po řádcích   otázka

ASP.NET WebForms, Databáze

Dobrý den,

potřeboval bych v proceduře (asp.net) číst data z SQL databázové tabulky ale po řádcích ( vždy načíst např. údaj jméno a mail do dvou proměnných ). Je to z důvodu dalšího zpracování dat z těchto proměnných v tomto cyklu ( zaslání emailu atd. ).

Díky za rady jaký objekt k tomu využít a ev. zařazení do cyklu.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Už jsem asi vyřešil viz níže.

Dim jmeno As String
Dim mail As String

Dim ConnectionString = "Data Source=……………"
Dim SqlConnection As New SqlConnection(ConnectionString)
Dim SqlCommand As New SqlCommand("SELECT [jmeno], [mail] FROM [dbo].[osoby]", SqlConnection)


SqlConnection.Open()
Dim DataReader As SqlDataReader = SqlCommand.ExecuteReader()

Do While DataReader.Read()
telefon = DataReader("jmeno")
poznamka = DataReader("mail")
            	
... 
Loop
DataReader.Close()
SqlConnection.Close()

Jen se chci ještě zeptat jak definuji do kódu connection string z web.config a dále zda existuje nějaká varianta jak do cyklu vložit nějaké zpoždění ( při přechodu na další řádek počkat např. 1/2s ).

Děkuji

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
mám tam drobnou chybku (pro úplnost opravuji ): 
jmeno = DataReader("jmeno")
mail = DataReader("mail")

To zpoždění řeším takto ( možná ale nepoužiji vůbec ):

            Dim milliseconds As Integer = 500
            Thread.Sleep(milliseconds)

Není v tom ale nějaký zakopaný pes ?

Díky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Vzhledem k tomu co zde uvádíte za "kód" bych Vám vřele doporučil začít se učit základy technologie ASP.NET a prostředí .Net obecně. Postup,který uvádíte a ceste kterou se snažíte jít je naprosto zcestná a od základu špatná.Neberte to špatně,učte se od počátků dobře základy a pak na nich stavte.Nemá cenu zmiňovat co vše je špatně,i když by se to dalo shrnout jedním slovem.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Co konkrétně je v kódu za tak nepředstavitelně hrozné chyby, že nemá cenu radit, jak je opravit?

Rozhodně by kód zasloužil úpravy, ale tolik jich není, například:

1) Na otevírání spojení použít Using blok pro bezpečné uzavření spojení.

2) Data číst nejdříve do nějakého seznamu a teprve potom je zpracovávat - dbejte, aby bylo spojení a dotaz do databáze otevřené co nejkratší dobu.

3) Logovat, které emaily jsou již zpracované, aby při vyjímce nebyl problém zjistit seznam již odeslaných emailů pro příští zpracování.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za konstruktivní odpovědi.

S bodem 3 jsem počítal. Na ostatní se podívám.

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

Nikde jsem neřekl,že je špatně všechno. Jen jsem podotkl,že tazatel již špatně začal a tak nemá smysl v takové práci pokračovat. Dle mého je lepší se soustředit na naučení se základů a to kvalitně a na nich poté stavět. Ne se snažit vytvořit něco,o čem nic netuším. Jako promiňte mi,ale přístup k DB delayovaný timerem?! Nemyslel jsem nic nijak špatně,naopak..chtěl jsem pouze tazatele navést na lepší cestu.Sám jsem začínal podobně jako on,než jsem si uvědomil,že takto se dělat prostě nedá. Nebo samozřejmě dá,ale vyjde z něj pak programátor,kterého budou ostatní programátoři z duše nenávidět,kvůli jeho děsnému kódu,přístupu,atd...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Právě tyto fóra slouží k tomu, aby se začátečníci něco naučili. Pokud někdo chce poradit s nějakým nesmyslem, na který absolutně nestačí, pak takovou odpověď chápu. Tohle je ale základ dotazování do db a nevidím důvod, proč neobětovat pár řádků a nepopsat alespoň jádro problému a případně nasměrovat na materiály, které základy popisují.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuji všem za podnětné informace.

Nyní jsem proceduru upravil takto :

Dim connStr As String = _
ConfigurationManager.ConnectionStrings("con_users").ConnectionString
Dim sqlCommand As String = _
"SELECT [jmeno], [mail] FROM [dbo].[users]"
         
            Using con As New SqlConnection(connStr) 
              Using com As New SqlCommand(sqlCommand, con)
                con.Open()
                Dim jmeno As String
                Dim mail As String
                Dim DataReader As SqlDataReader = com.ExecuteReader()
               
                Do While DataReader.Read()
                    jmeno = DataReader("jmeno")
                    mail = DataReader("mail")
                ......
                Loop
                con.Close()
            End Using
        End Using

Případné připomínky uvítám.

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

Označujte kód, takto se to nedá číst (tento příspěvek jsem ještě opravil).

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

Dobře - nevšiml jsem si.

Díky

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

Na níže uvedené zapomeňte...načtěte si data například do DataSetu nebo jiné kolekce.A poté jej dále zpracovávejte.Nicméně doporučuji zapomenout na,pro vás zatím,pokročilé fce a začít od píky.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Děkuji za krátkou reakci typu všechno je špatně.

Procedura mi funguje nicméně nechci používat nějaký nevhodný postup.

Inspiroval jsem se příkladem v článku - čtení dat z databáze a zpracování v cyklu :

http://www.vbnet.cz/clanek--52-komunikac...

DataSet ( resp. ovládací prvek SqlDataSource ) používám pro načítání dat do dalších ovládacích prvků. Jak ho využít pro další zpracování data v cyklu nevím.

Díky za podrobnější info.

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

Začněte tímto: http://webforms.cz/Tutorialy.aspx

nahlásit spamnahlásit spam 1 / 1 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