Avatar billede doomstone-dk- Nybegynder
03. december 2007 - 10:26 Der er 6 kommentarer og
2 løsninger

Flere sql commandoer på 1 connection

Hej jeg har arbejdet med C# i et par uger nu, men en ting der undre mig er måde man omgås med sql på :D

f.eks. hvis jeg skal udføre 2 sql comandoer skal jeg gøre sådan her.

Kan det virkelige passe at jeg skal åbne og lukke forbindelsen 2 gange for at kunne gøre dette?

            string sql = "SELECT * FROM tabel 1";
            using (SqlConnection cnn = new SqlConnection(this.cfg.getConnString()))
            {
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    cnn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            return true;
                        }
                        dr.Close();
                    }
                }
            }       

            string sql = "SELECT * FROM tabel 2";
            using (SqlConnection cnn = new SqlConnection(this.cfg.getConnString()))
            {
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    cnn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            return true;
                        }
                        dr.Close();
                    }
                }
            }
Avatar billede kalp Novice
03. december 2007 - 10:28 #1
nej du skal bare lukke dr.Close(); dr.Dispose();
Avatar billede bennytordrup Nybegynder
03. december 2007 - 10:29 #2
Det er korrekt.

Med mindre, du kører på en SQL 2005 og har slået Multiple Active Result Set (MARS) til i din connecstion string. Den står default deaktiveret.
Avatar billede kalp Novice
03. december 2007 - 10:31 #3
string sql = "SELECT * FROM tabel 1";
            using (SqlConnection cnn = new SqlConnection(this.cfg.getConnString()))
            {
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    cnn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            return true;
                        }
                        dr.Close();
dr.Dispose();
sql = "SELECT * FROM tabel 2";
cmd.CommantText = sql;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    }
                }
            }
Avatar billede kalp Novice
03. december 2007 - 10:31 #4
sådan ca..

et helved og arbejde med kode direkte på E:) men det muligt.. du skal bare lukke din datareader og ikke sende CloseConnection med i din command før du er ved det er sidste kald du laver...

ellers luk den manuelt.
Avatar billede doomstone-dk- Nybegynder
03. december 2007 - 13:21 #5
Ja vil rigtig gerne lære at arbejde med det direkte i Visual C# men har ikke kunne finde nogen guide til det :( hvis i kender en god guide må i meget gerne skrive et link.
Har ikke lige haft tid til at teste det endnu, så venter lige lidt med at accepter jeg svar :D
Avatar billede arne_v Ekspert
04. december 2007 - 02:29 #6
du skal bare slette lidt:

            using (SqlConnection cnn = new SqlConnection(this.cfg.getConnString()))
            {
                cnn.Open();
                string sql = "SELECT * FROM tabel 1";
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            // process dr
                        }
                    }
                }

                string sql = "SELECT * FROM tabel 2";
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    cnn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            // process dr
                        }
                    }
                }
            }
Avatar billede arne_v Ekspert
04. december 2007 - 02:29 #7
ups - jeg fik ikke slettet det sidste cnn.Open:

            using (SqlConnection cnn = new SqlConnection(this.cfg.getConnString()))
            {
                cnn.Open();
                string sql = "SELECT * FROM tabel 1";
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            // process dr
                        }
                    }
                }

                string sql = "SELECT * FROM tabel 2";
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            // process dr
                        }
                    }
                }
            }
Avatar billede doomstone-dk- Nybegynder
04. december 2007 - 09:17 #8
Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester