Avatar
N-nojmi
Člen
Avatar
N-nojmi:

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
rwn
Člen
Avatar
Odpovídá na N-nojmi
rwn:

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 rwn
N-nojmi:

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:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 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 rwn
Michal Štěpánek:

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:

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:

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:

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:

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.