Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
fandas
Člen
Avatar
fandas:5.8.2013 11:49

Ahoj,
jako začátečník v C# jsem narazil na problém s updatem dat v MsSql.
Mám db tabulku se záznamy, kterou si načtu do programu jako statickou datatable. Pokud se snažím záznam přidat či změnit - přes příkaz sqlAdap.Update(dtZaz­namy);, vše funguje jak má, jen při pokusu o smazání konkrétního řádku se nestane nic. Žádná chyba, ale také žádný efekt, program proběhne, ale v databázi se nic nezmění. Zkusil jsem i smazání konkrétního řádku přes sqlCommand.Exe­cuteNonQuery();, také bez úspěchu.
Co s tím?
Předem dík za pomoc.

 
Odpovědět
5.8.2013 11:49
Avatar
fandas
Člen
Avatar
fandas:5.8.2013 12:38

Přikládám ještě část zdrojového kódu

private void ulozDataDoDB()
{
    // uložení dat
    SqlConnection dbConn = new SqlConnection(dbConnStr);
    dbConn.Open();
    string sqlDotaz = "select * from zaznamy";
    SqlDataAdapter sqlAdap = new SqlDataAdapter(sqlDotaz, dbConnStr);
    SqlCommandBuilder sqlCB = new SqlCommandBuilder(sqlAdap);
    sqlAdap.UpdateCommand = sqlCB.GetUpdateCommand();
    try
    {
        sqlAdap.Update(dtZaznamy);
    }
    catch (Exception)
    {

    }
    finally
    {
        dbConn.Close();
    }
}

private void smazDataZdb()
{
    // smazání dat
    SqlConnection dbConn = new SqlConnection(dbConnStr);
    dbConn.Open();
    try
    {
        string sqlDotaz = "delete from zaznamy where porcis = " + ((int)dataFrm2.sPorCis).ToString();
        SqlCommand sqlcomm = new SqlCommand(sqlDotaz, dbConn);
        sqlcomm.ExecuteNonQuery();
    }
    catch (Exception)
    {

    }
    finally
    {
        dbConn.Close();
    }
}

// smazání záznamu
void button4_Click(object sender, EventArgs e)
{
    nulujDataFrm2();
    nastavDataFrm2();
    string dotaz = "por_cis = " + ((int)dataFrm2.sPorCis).ToString();
    DataRow[] radek = dtZaznamy.Select(dotaz);
    int index = dtZaznamy.Rows.IndexOf(radek[0]);
    // index nalezen podle por_cis, to se nesmí změnit !!

    string message = "Opravdu chcete smazat označený záznam?";
    string caption = "Smazání záznamu";
    MessageBoxButtons buttons = MessageBoxButtons.YesNo;
    DialogResult result;
    result = MessageBox.Show(message, caption, buttons);
    if (result == System.Windows.Forms.DialogResult.Yes)
    {
        dtZaznamy.Rows[index].Delete();
        ulozDataDoDB();
        //smazDataZdb();
        nactiTabulkuZaznamy();
        sestavAprovedDotaz();
    }

}
 
Nahoru Odpovědět
5.8.2013 12:38
Avatar
Odpovídá na fandas
Luboš Běhounek Satik:5.8.2013 13:51

Jednak nemáš ošetřenou sql injekci, na to si dej pozor - parametry předávej vždy přes .Parameters.Ad­dWithValue() u SqlCommandu.

A zkontroluj si, jakej vyslednej prikaz tam volas a jestli opravdu nedojde k nejaky chybe.

Nahoru Odpovědět
5.8.2013 13:51
https://www.facebook.com/peasantsandcastles/
Avatar
fandas
Člen
Avatar
fandas:5.8.2013 14:18

Díky, vyřešeno,
nebylo to přesně tím, ale silně mě to poslalo správným směrem.

 
Nahoru Odpovědět
5.8.2013 14:18
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 4 zpráv z 4.