NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: ADO.NET - vlastní DataSet, dotak k editaci řádku (SQL injekce)

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Poggy
Člen
Avatar
Poggy:7.5.2017 14:41

Ahoj,
snažím se procvit ADO.NET v odpojeném režimu na vlastním příkladu. Založil jsem SQL tabulku s názvem Pokus. Poté jsem vytvořil silně typovou lokální sadu DataSet a pojmenoval jí MujDataSet. Nyní k dotazu. Vygooglil jsem příklad pro editaci řádku tabulky v této sadě v dokumentaci a upravil na svůj příklad. Jen se mi nelíbí, že tam není nic jako parrameters.ad­dwithvalue("@Jme­no", jmeno) jako u připojeného režimu. Můj kód je zde:

MujDataSet datovaSada = new MujDataSet();
        MujDataSetTableAdapters.PokusTableAdapter adapter = new MujDataSetTableAdapters.PokusTableAdapter();
        MujDataSet.PokusDataTable tabulkaKlientu;
private void btnZmen_Click(object sender, EventArgs e)
        {
            if (txtCisloKlienta.Text.Length == 0 || txtCisloKlienta.Text == "nový")
            {
                MessageBox.Show("Vyberte klienta.");
            }
            else
            {
                int id = Convert.ToInt32(txtCisloKlienta.Text);
                string jmeno = txtJmenoKlienta.Text;
                string prijmeni = txtPrijmeniKlienta.Text;
                try
                {
                    MujDataSet.PokusRow editovanyRadek = datovaSada.Pokus.FindById(id);
                    editovanyRadek.Jmeno = jmeno; // zde se mi to nelíbí
                    editovanyRadek.Prijmeni = prijmeni; // zde se mi to nelíbí
                    AktualizujDatabázi();
                    NactiTabulkuKlientu();
                    NactiKlienty();
                    VymazVsechnyPole();
                }
                catch
                {
                    MessageBox.Show("Aktualizace se nezdařila.");
                }
            }
        }

Umí DataSet ošetřit "sám" injekce nebo bych měl kód ještě upravit? Nerad bych se naučil nepoužitelný pasvil. Děkuji za rady.

 
Odpovědět
7.5.2017 14:41
Avatar
Odpovídá na Poggy
Nikola Sterziková (PaNika):12.5.2017 10:50

No, pokud používáš ADO.Net, tak někde musíš použít objekty Command (např. SqlCommand), a DataAdapter (SqlDataAdapter) který vrací výsledek do DataSetu. Parametry se dávají do objektu Command a to můžeš udělat v jednom řádku takto:

cmd.Parameters.Add(new SqlParameter("@NazevParametru", SqlDbType.VarChar)).Value = hodnotaParametru;

To platí pro web, je možné, že pro windows má Microsoft nějaký vylepšený vlastní DataSet, to nevím...

Nicméně dnes se stejně čistá ADO.Net již nepoužívá, pracuje se spíše s nějakými O/R mappery (např. EntityFramework), které mají parametrizaci dotazů vyřešenou.

 
Nahoru Odpovědět
12.5.2017 10:50
Avatar
Poggy
Člen
Avatar
Odpovídá na Nikola Sterziková (PaNika)
Poggy:16.5.2017 18:06

Ahoj, děkuji za reakci. Ještě jsem pátral a když můžu upravit/přidat vlastní dotaz pro plnění přes adaptér jsem si všiml, že je dotaz parametrizován automaticky. Takže bych řekl, že DataSet to již má pořešené v případě odpojeného režimu. Snad se nepletu. Viz. screen. Na Entity se chystám.

 
Nahoru Odpovědět
16.5.2017 18:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.