Avatar billede bongii Nybegynder
26. oktober 2009 - 16:16 Der er 42 kommentarer og
1 løsning

Er dette den smarteste måde mht,. connection

Har lavet en update funktion, det er min første db conn vha. .net c#, er det den smarteste måde jeg har lavet det på eller er der en anden måde jeg bør benytte?

  string strConn = ConfigurationManager.ConnectionStrings["Frontpage"].ToString();
        SqlConnection dbconn = new SqlConnection(strConn);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "update member set navn = 'newname' where id = 11";
        cmd.Connection = dbconn;
        dbconn.Open();
        cmd.ExecuteNonQuery();
        dbconn.Close();
Avatar billede arne_v Ekspert
26. oktober 2009 - 16:36 #1
Ja.

Bortset fra:

string strConn = ConfigurationManager.ConnectionStrings["Frontpage"].ToString();

->

string strConn = ConfigurationManager.ConnectionStrings["Frontpage"].ConnectionString;
Avatar billede keysersoze Guru
26. oktober 2009 - 18:12 #2
Jeg ville nok umiddelbart benytte using - se fx http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx - da du på den måde minimere risikoen for at glemme lukning af objekter.
Avatar billede bongii Nybegynder
26. oktober 2009 - 21:47 #3
tak for feedback.

Jeg syntes det er ret meget at skrive hver gang man skal lave en db connection, findes der ikke noget smart, hvor man pakker det ind i funktioner.

I classic asp includerede jeg bare connection string på alle sider og skrev:

call opendb()
call opentbl("select * from users", users)
do while not users.eof
response.write users("navn")
users.movenext
loop
call closetbl(users)
call closedb()

Det er da til at forstå og mega let.
Avatar billede arne_v Ekspert
26. oktober 2009 - 21:55 #4
cmd.CommandText = "update member set navn = 'newname' where id = 11";

skal naturligvis ogsaa laves med parametre !
Avatar billede arne_v Ekspert
26. oktober 2009 - 21:57 #5
Hvis du gerne vil spare linier saa kan du lave:

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "update member set navn = 'newname' where id = 11";
        cmd.Connection = dbconn;

som:

        SqlCommand cmd = new SqlCommand("update member set navn = 'newname' where id = 11", dbconn);
Avatar billede bongii Nybegynder
27. oktober 2009 - 09:39 #6
Ok.

nu har jeg

using (SqlConnection dbconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Frontpage"].ToString()))
        {
            using (SqlCommand cmd = new SqlCommand("update members set Navn = 'newname' where id = 11", dbconn))
            {
                dbconn.Open();
                cmd.ExecuteNonQuery();
            }
        }

Det må være den optimale løsning?
Avatar billede keysersoze Guru
27. oktober 2009 - 13:13 #7
Det er i hvert fald måden jeg ville gøre det på - men det skal også nævnes, at der er kommet nogle værktøjer (fx Entity Framework), der mere eller mindre kan gøre alt database-arbejdet for os (alt afhængig af nogle forhold selvfølgelig) så måske var dette også værd at kigge på.
Avatar billede bongii Nybegynder
27. oktober 2009 - 13:41 #8
Ok tak for svar begge.

Smider i begge et svar, så deler jeg points mellem jer.

Har lige lavet et indsæt script. er det fint nok lavet?

using (SqlConnection dbconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Frontpage"].ToString()))
        {
            using (SqlCommand cmd = new SqlCommand("select * from members", dbconn))
            {
                dbconn.Open();
                SqlDataReader rs = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (rs.Read())
                {
                    Response.Write(rs["ID"]);
                }

            }
        }
Avatar billede arne_v Ekspert
27. oktober 2009 - 14:06 #9
Jeg vil stadig bruge ConnectionString fremfor ToString.

Du mangler at close din data reader.

CommandBehavior.CloseConnection er nok ikke noedvendig her.

Der er doedsstraf for at bruge Response.Write i ASP.NET - kig paa web kontroller f.eks. repeater.
Avatar billede arne_v Ekspert
27. oktober 2009 - 14:06 #10
Og et svar.
Avatar billede bongii Nybegynder
27. oktober 2009 - 14:19 #11
Altså sådan her:

  protected void Select_Click(object sender, EventArgs e)
    {
        using (SqlConnection dbconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Frontpage"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("select * from members", dbconn))
            {
                dbconn.Open();
                SqlDataReader rs = cmd.ExecuteReader();
                MyDataList.DataSource = rs;
                MyDataList.DataBind();
                rs.Close();
            }
        }
             

    }
Avatar billede arne_v Ekspert
27. oktober 2009 - 14:24 #12
Hvis du har lyst til at bruge en data list: ja.
Avatar billede bongii Nybegynder
27. oktober 2009 - 14:27 #13
Er det ikke så godt da?
Avatar billede arne_v Ekspert
27. oktober 2009 - 14:40 #14
Er lilla en paen farve?

Der er forskellige web kontroller - kig paa dem og find den du bedst kan lide til dit problem.

Du kan se nogle af mulighederne her:
  http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/data/default.aspx
Avatar billede bongii Nybegynder
27. oktober 2009 - 16:19 #15
Kan jeg ikke placere denne i en eller anden global funktion så jeg bare kan skrive opendb() i stedet for at skrive nedenstående linje:

SqlConnection(ConfigurationManager.ConnectionStrings["Frontpage"].ConnectionString))
Avatar billede arne_v Ekspert
27. oktober 2009 - 16:33 #16
Du kan godt lave en lille utility klasse mednogle metoder som pakker den slags ind.

Hvis du ikke selv gider skrive den kode, saa kig paa DAAB.
Avatar billede MRLN Nybegynder
27. oktober 2009 - 16:42 #17
Jeg ville nok kigge lidt på Linq istedet.
Avatar billede bongii Nybegynder
27. oktober 2009 - 16:49 #18
Altså linq til at oprette små-funktioner?
Avatar billede MRLN Nybegynder
27. oktober 2009 - 16:56 #19
ja. men vel egentlig også til at lave forbindelsen. Ved at bruge Linq to SQL Klassen som ligger under Data når du har valgt Add  new Item så får du en del foræret. Linq queries er dog en smule anderledes men hvis du kigger på nettet er der masser af eksempler.
Avatar billede MRLN Nybegynder
27. oktober 2009 - 17:04 #20
f.eks

Det kører lidt på hukommelsen så bær over med mig ;o)

//Klassen med forbindelsen
DataClasses1DataContext = new context DataClasses1DataContext();


var t = from memb in context.GetTable<Members> select memb;
//Svarer til select * from members
Avatar billede arne_v Ekspert
27. oktober 2009 - 17:56 #21
En O/R-mapper er en lidt anden maade at tilgaa data paa.

Og i mange sammenhaenge en glimrende maade.

Der er saa forskellige ORM'er: NHibernate, LLBLGen, LINQ to SQL, LINQ to EF etc..

Du skal absolut kigge paa diverse ORM paa et tidspunkt.

Jeg vil dog nok anbefale enten en ikke-MS eller LINQ to EF fremfor LINQ to SQL. LINQ to SQL har ikke meget fremtod foran sig.
Avatar billede MRLN Nybegynder
27. oktober 2009 - 19:11 #22
Mener du Linq i det hele taget eller er det kun Linq to SQL der ikke har fremtid foran sig?
Avatar billede arne_v Ekspert
27. oktober 2009 - 19:16 #23
LINQ to SQL. Fordi MS satser mere paa LINQ to EF.
Avatar billede keysersoze Guru
27. oktober 2009 - 19:30 #24
LINQ to SQL var en forløber til EF og var mig bekendt slet ikke tiltænkt som et produkt der skulle releases - men pga pres fra udviklerne og den lange tidshorisont til EF valgte man alligevel at lægge det ud. Derfor skal man se produktet som erstattet af EF.
Avatar billede MRLN Nybegynder
27. oktober 2009 - 21:41 #25
Tak for info. Jeg var slet ikke klar over at der var noget andet på vej.
Avatar billede bongii Nybegynder
27. oktober 2009 - 21:43 #26
hehe drenge, jeg tror bare jeg bruger normal SQL ADO, det virker ikke så indviklet. Der er jo en milliard forskellige måder at connecte til databaser på og udskrive resultatet. Rimelig irriterende at der ikek bare kan være én god måde så man ikke hele tiden støder på en ny metode.
Avatar billede MRLN Nybegynder
27. oktober 2009 - 21:52 #27
Ja gem linq til en anden gang, men glem det ikke for det er virkelig smart.
Avatar billede bongii Nybegynder
27. oktober 2009 - 21:59 #28
Jamen det hele er jo smart :)

Kender i en god bog eller en gennemgang fra a-z hvordan man laver web med smart programmering mht. gridviews osv? Mange af de kontrollere i vs er som jeg ser det, beregnet til intranet og interne systemer med alt der der javascript kode osv. Men sådan laver man jo ikke en live side.
Avatar billede arne_v Ekspert
27. oktober 2009 - 22:01 #29
Der bruges godt nok ogsaa meget JavaScript til internet idag.
Avatar billede arne_v Ekspert
27. oktober 2009 - 22:02 #30
Du skal nok have fat i en god ASP.NET bog.

Wrox plejer at have gode .NET boeger.
Avatar billede bongii Nybegynder
27. oktober 2009 - 22:09 #31
Arne: Ja, men hvis man nu bare bruger alle standard funktionerne i vs, kommer koden jo til at se forfærdelig ud.

Undersøger lige Wrox  ;)
Avatar billede bongii Nybegynder
27. oktober 2009 - 22:39 #32
Avatar billede keysersoze Guru
27. oktober 2009 - 22:52 #33
Det der er vigtigt at holde for øje hvis man skifter fra ASP til ASP.NET er, at de stort set eneste 3 ting der går igen er bogstaverne A, S og P - alt resten må ikke sammenlignes. En af de gode ting, men også en af de ting der gør indlæringskurven til ASP.NET stejlere end til ASP, er de mangle forskellige muligheder hvor hver har deres fordele og ulemper.

Jeg har læst version 2.0 bogen af den du har bestilt og den fokuserer rigtig godt på nogle af kontrollerne samt arkitektur i applikationen og ikke mindst hvorfor man vælger som man gør. Men man må selvfølgelig ikke tro at det altid er måden at gøre det på - det kræver godt med test og googling af andres erfaringer om fx kontroller for at lære at vælge det måske rigtige. De vigtige ting at fokusere på fra starten vil jeg umiddelbart mene må være et rigtige skifte til OOP samt lag-opdeling af ens arkitektur - brug af kontroller vil mere eller mindre komme af sig selv.
Avatar billede arne_v Ekspert
28. oktober 2009 - 02:10 #34
Med hensyn til den genererede HTML og JS, så skal du jo huske på at der er forskel på browsere og mennesker.

Hvis HTML og JS er validt, så er browserne glade - de går ikke op i pæn/grim kode.

Pæn kode er afgørende når mennesker skal læse koden. Men hvis HTML og JS genereres udfra kontroller, så har du ikke brug for at læse HTML og JS - og kan derfor være kold overfor om den er helt gal med navne og indrykning etc..
Avatar billede bongii Nybegynder
28. oktober 2009 - 08:02 #35
Tak for en god debat drenge, Soze smider du et svar?
Avatar billede keysersoze Guru
28. oktober 2009 - 09:21 #36
Der findes kontroller så du kan få pæn kode i de fleste tilfælde - men den pæne kode er så på bekostning af den funktionalitet de avancerede kontroller giver (men det er selvfølgelig langt fra altid nødveendigt med den funktionalitet).

Vil du tilbage til noget der minder mere om klassisk ASP så hedder det ASP.NET MVC.
Avatar billede keysersoze Guru
28. oktober 2009 - 09:23 #37
og et svar :)
Avatar billede bongii Nybegynder
28. oktober 2009 - 10:28 #38
tak ;)

Er .net mvc smart :)?
Avatar billede keysersoze Guru
28. oktober 2009 - 18:16 #39
MVC er lige så smart som det er usmart - det kommer an på hvad man har behov for i sin programmering, fx har du ikke viewstate som i ASP.NET men til gengæld får du fuld kontrol over din html ligesom opsplitningen mellem kode og markup er reel.
Avatar billede keysersoze Guru
29. december 2009 - 11:36 #40
lukketid?
Avatar billede arne_v Ekspert
29. december 2009 - 17:22 #41
Jeg undrer mig lidt.

#8 - Smider i begge et svar, så deler jeg points mellem jer.

#10 - afvist svar

#37 - afvist svar

#40 - accepteret svar
Avatar billede keysersoze Guru
29. december 2009 - 17:50 #42
så kan du lære det kan du ;)

http://www.eksperten.dk/spm/896790
Avatar billede bongii Nybegynder
29. december 2009 - 18:18 #43
Ahh sorry Arne. Det gik lidt hurtigt :(
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

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