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
N-nojmi
Člen
Avatar
N-nojmi:24.3.2015 14:25

Zdravím,

mám problém s několika SQLCOMMAND v jedné CONNECTION.

Potřebuji zapsat po stisku tlačítka hodnotu do databáze a hned potom vytýhnout ID té hodnoty z databáze a to zase použít v dalším INSERTU do databáze.....

using (SqlConnection cnn = new SqlConnection())
            {
                cnn.ConnectionString = ConfigurationManager.ConnectionStrings["zamest"].ConnectionString;
                cnn.Open();




                //ULOŽÍ SE DIČ
                SqlCommand cmd = new SqlCommand("INSERT INTO T_Dic(Dic, OsCislo, DatumZalozeni, Poznamka, ID_ECislo) Values(@Dic, @OsCislo, @DatumZalozeni, @Poznamka, @ID_ECislo)", cnn);
                cmd.Parameters.AddWithValue("@Dic", tbxDic.Text);
                cmd.Parameters.AddWithValue("@OsCislo", txbOsobniCislo.Text);
                cmd.Parameters.Add("@DatumZalozeni", DateTime.Now);
                cmd.Parameters.AddWithValue("@ID_ECislo", DropDownList1.SelectedValue.ToString());
                cmd.Parameters.AddWithValue("@Poznamka", txbPoznamky.Text);



                //NAČTE SE ID_DIČ

                SqlCommand cmd2 = new SqlCommand("SELECT ID_Dic FROM T_Dic WHERE Dic = @Dic", cnn);
                cmd2.Parameters.Add(new SqlParameter("Dic", System.Data.SqlDbType.NVarChar));// přidání parametru a určení datového typu
                cmd2.Parameters["Dic"].Value = tbxDic.Text;// určení parametru odkuk vzít data

                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd2);
                da.Fill(dt);
                string IDDic = dt.Rows[0]["ID_Dic"].ToString();



                //ULOŽÍ SE OBDOBÍ S ID_DIC
                if (ListBoxObdobi.Items.Count > 0)
                {
                        for (int i = 0; i < ListBoxObdobi.Items.Count; i++)
                        {
                            if (ListBoxObdobi.Items[i].Value != null)
                            {
                                str = "INSERT INTO T_Obdobi (Obdobi,ID_Dic) values('" + ListBoxObdobi.Items[i].ToString() + "', '@ID_Dic')";
                                com = new SqlCommand(str, cnn);
                                com.Parameters.Add("@ID_Dic", IDDic);
                            }
                        }

                    Label1.ForeColor = System.Drawing.Color.Green;
                    Label1.Text = ("Zapsáno");
                    ListBoxObdobi.Items.Clear();
                }
                else
                {
                    Label1.Text = "Nenalezena data k zapsání!";
                }

            }

Prosím o radu.... zkoušel jsem po každem dotazu znovu připojit a odpojit conection ale nepomáhá to....

Předem díky

Odpovědět
24.3.2015 14:25
Není hloupých lidí, jen lidí co málo používají google...
Avatar
rawen
Člen
Avatar
Odpovídá na N-nojmi
rawen:24.3.2015 17:39

Podle mě to děláš zbytečně složitě to načtení Id, nestačilo by něco takového?

SqlCommand cmd2 = new SqlCommand("SELECT TOP 1 [ID_Dic] FROM [T_Dic] ORDER BY [ID_Dic] DESC", cnn);

Kde se v podstatě ptám rovnou na id poslední položky, což je vždy ta poslední přidaná.. (jinak je docela dobrý psát názvy tabulek a sloupečků do hranatých závorek pro přehlednost). Docela by mě i teda zajímalo jestli u tebe vůbec k zápisu do databáze dojde?, nebo jestli ti nejde jen to načtení podle id?, nebo co přesně nefunguje? :)

Nahoru Odpovědět
24.3.2015 17:39
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
N-nojmi
Člen
Avatar
Odpovídá na rawen
N-nojmi:25.3.2015 8:04

DO databáze se nic nezapíše a ukazuje se chyba : There is no row at position 0 ... takže nejspíš nejsou data v datatable

Díky za tip na dotaz máš pravdu, že to co ukládám je vždy poslední......

Nahoru Odpovědět
25.3.2015 8:04
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Odpovídá na N-nojmi
Michal Štěpánek:25.3.2015 8:19

Jak se ti může něco uložit do DB, když tam k tomu nemáš příkaz? Chybí ti tam

cmd.ExecuteNonQuery();
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
25.3.2015 8:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na rawen
Michal Štěpánek:25.3.2015 8:24

Taky by mohlo stačit

SELECT MAX(ID_Dic) FROM T_DIC
Nahoru Odpovědět
25.3.2015 8:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na N-nojmi
sadlomaslox25:25.3.2015 9:18

misto

//ULOŽÍ SE DIČ
                SqlCommand cmd = new SqlCommand("INSERT INTO T_Dic(Dic, OsCislo, DatumZalozeni, Poznamka, ID_ECislo) Values(@Dic, @OsCislo, @DatumZalozeni, @Poznamka, @ID_ECislo)", cnn);
                cmd.Parameters.AddWithValue("@Dic", tbxDic.Text);
                cmd.Parameters.AddWithValue("@OsCislo", txbOsobniCislo.Text);
                cmd.Parameters.Add("@DatumZalozeni", DateTime.Now);
                cmd.Parameters.AddWithValue("@ID_ECislo", DropDownList1.SelectedValue.ToString());
                cmd.Parameters.AddWithValue("@Poznamka", txbPoznamky.Text);



                //NAČTE SE ID_DIČ

                SqlCommand cmd2 = new SqlCommand("SELECT ID_Dic FROM T_Dic WHERE Dic = @Dic", cnn);
                cmd2.Parameters.Add(new SqlParameter("Dic", System.Data.SqlDbType.NVarChar));// přidání parametru a určení datového typu
                cmd2.Parameters["Dic"].Value = tbxDic.Text;// určení parametru odkuk vzít data

                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd2);
                da.Fill(dt);
                string IDDic = dt.Rows[0]["ID_Dic"].ToString();

toto

SqlCommand cmd = new SqlCommand("INSERT INTO T_Dic(Dic, OsCislo, DatumZalozeni, Poznamka, ID_ECislo) OUTPUT INSERTED.ID_Dic Values(@Dic, @OsCislo, @DatumZalozeni, @Poznamka, @ID_ECislo)", cnn);
cmd.Parameters.AddWithValue("@Dic", tbxDic.Text);
cmd.Parameters.AddWithValue("@OsCislo", txbOsobniCislo.Text);
cmd.Parameters.Add("@DatumZalozeni", DateTime.Now);
cmd.Parameters.AddWithValue("@ID_ECislo", DropDownList1.SelectedValue.ToString());
cmd.Parameters.AddWithValue("@Poznamka", txbPoznamky.Text);


string IDDic=cmd.ExecuteScalar().ToString();
 
Nahoru Odpovědět
25.3.2015 9:18
Avatar
Odpovídá na sadlomaslox25
Michal Štěpánek:25.3.2015 10:23

Jsi si jistý, že je to správně?

Nahoru Odpovědět
25.3.2015 10:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
N-nojmi
Člen
Avatar
Odpovídá na sadlomaslox25
N-nojmi:25.3.2015 10:28

Moc děkuju, vše funguje jak má a díky za ten typ na zkrácení kódu ;)

Nahoru Odpovědět
25.3.2015 10:28
Není hloupých lidí, jen lidí co málo používají google...
Avatar
Odpovídá na sadlomaslox25
Michal Štěpánek:25.3.2015 11:27

Ano, měl jsem se nejdřív podívat na celé znění toho vkládacího dotazu... :O

Nahoru Odpovědět
25.3.2015 11:27
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 9 zpráv z 9.