28. marts 2005 - 01:41Der er
62 kommentarer og 1 løsning
Hvordan skriver jeg noget ud på for at teste/fejlsøge
Jeg forsøger at se om alt er som jeg gerne vil have. Men hvordan kan jeg skrive noget ud på skærmen eller bare på siden relativt hurtigt, så jeg kan se om det jeg ønsker, er det der kommer frem i koden.
********************* kOde ***************** while (rdr.Read()) { CartData c = new CartData(); Console.WriteLine("Hello"); <------- hvordan får jeg det på skærmen????? c.ProductId = Convert.ToInt32(rdr["product_id"]); c.CatPhotoId = Convert.ToInt32(rdr["prod_cat_photo_id"]); c.SupplierId = Convert.ToInt32(rdr["supplier_id"]); c.PhotoId = Convert.ToInt32(rdr["photo_id"]); c.CartGuId = rdr["guid"].ToString(); c.Amount = Convert.ToInt32(rdr["amount"]); c.ProductName = rdr["product_name"].ToString(); c.ProductPrice = Convert.ToDecimal(rdr["product_price"]); c.ProductDescription = rdr["product_description"].ToString(); arrLstCart.Add(c); }
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
snepnet>> du af alle burde da vide at response.write er noget snask i forbindelse med asp.net ;) man har ingen kontrol over hvor på siden det kommer til at stå, hvis det i det hele taget kommer til ud. Trace er Gates' gave til debugging i webapplikationer :P
Jeg har det problem at jeg mistænker for at jeg slet ikke kommer ind i den while løkke jeg har skrevet foroven. Kan du fortælle om hvordan jeg kan tjekke om jeg overhovedet kommer ind i løkken.
HttpContext.Current.Response.Write(...) - skulle gerne give dig et output på siden.
HttpContext.Current.Trace.Write(...) - giver dig en entry i dit trace. (for brug se cyberfessors link).
System.Diagnostics.Debug.Write(...) - giver dig en entry i dit output.
Hvis du blot skal se hvad værdien af en specifik variabel er, synes jeg generelt at det er at foretrække blot at benytte debuggeren.
Og det er bestemt rigtigt hvad cyberfessor skriver.... Response.Write er ikke en anbefaling til din applikation som sådan - men det er en hurtig måde at se værdien af en variabel på skærmen i forbindelse med udvikling, hvis det blot er det du vil - og det vil komme ud før alt andet du laver (altså også før dit html-tag).
Men.... jeg synes som sagt ikke der er nogen grund til at du ikke benytter den aldeles fremragende debugger - den er suveræn, og du kan med den uden problemer kontrollere om du kommer ind i diverse løkker mv. Bruger du et udviklingsmiljø af en art (webmatrix, visual studio eller ?).
Og... den klasse du har vist et udsnit af - er det en side, en kontrol eller bare en eller anden klasse ?
hvis du bruger visual studion kan du bare klikke med musen i den grå linie til venstre for din kode for at sætte en breakpoint. du starter så applikationen ved at trykke på F5 (for start med debugging). så vil eksekveringen stoppe ved dit brakpoint og du kan trisse frem igennem koden med F10 og F11 (F10 for step over, og F11 for stem into - f.eks. ind i en anden metode).
undervejs kan du så se indholdet af varable mv. ofte blot ved at holde musen over... ellers kan du markere det du gerne vil se noget mere om, og trykke SHIFT+F9 (det giver dig en ganske fornufte viwer op).
desuden har du et kommandovidue til rådighed og en watch (hvor du kan sætte diverse variable op du gerne vil holde øje med).
(indsættelse af breakpoint kan du også gøre mens du debugger, og det kan også bare gøres ved at du stiller dig på en linie og trykker F9... hvis du vil fjerne alle eksisterende breakpoints kan du trykke SHIFT+F) mvh
Jo, det virker cool det trace. Men hvad med min løkke? Hvorfor kan jeg ikke få returneret en ArrayList med indhold, for ude i mit 'main program', der kan jeg ikke pakke det returnerede ArrayList ud, og længden på min ArrayList er lig 0. Så dvs jo sige at min løkke aldrig bliver kørt.
kender ikke DBConnector, men normalt vil du have noget :
MySqlConnection con = new MySqlConnection(...); MySqlCommand command = new MySqlCommand(..., con); MySqlDataReader = command.ExecuteReader(CommandBehavior.CloseConnection); osv...
så kommer der vel bare ikke noget data med op.... har du prøvet at skrive/trace/whatever din strSql, og fyre den af direkte mod basen (du har nok en eller anden mysql-frontend forestiller jeg mig).
sæt et breakpoint på denne linie : while (rdr.Read()) og tryk på F5 og se hvad der sker. hvis eksekveringen så stopper der, så tryk på F10 og se hvad der så sker.
(og jeps ... du kan godt bare lukke den i dbclose, hvis du hellere vil det). mvh
hmm for at kunne bruge CommandBehavior skal jeg vel inkludere et eller andet namespace, det er ihvertfald den fejl jeg får nu.
\Database\DbConnector.cs(27): The type or namespace name 'CommandBehavior' could not be found (are you missing a using directive or an assembly reference?)
Nu efter at have tilføjet: using System.Data.CommandBehavior.CloseConnection; Øverst i min DBConnector klasse, får jeg følgende....
\Database\DbConnector.cs(4): The type or namespace name 'CloseConnection' does not exist in the class or namespace 'System.Data.CommandBehavior' (are you missing an assembly reference?)
Det der med breakpoint virker ikke, jeg har forsøgt at højreklikke på den grå linje, hvorefter jeg har valgt insert breakpoint, men jeg kan ikke se noget tegn et eller andet, der fortæller at jeg har et et breakpoint ind.
Nope, jeg havde ret den kommer slet ikke ind i min løkke, måske er min rdr (reader) tom. Så nu ville jeg jo ligsom i alm asp skrive min sql streng ud for at se om den havde fejl. Det vil jeg prøve med response.write, hvis den virker....
det er jo en god start.... så skal du bare have noget data med op - så skal den nok hoppe ind i din løkke. (husk du bare kan trisse videre i koden ved at trykke på F10) mvh
Men så får jeg en fejl. \Database\DbConnector.cs(28): The type or namespace name 'SqlConnection' could not be found (are you missing a using directive or an assembly reference?)
\Database\DbConnector.cs(43): The type or namespace name 'CommandBehavior' could not be found (are you missing a using directive or an assembly reference?)
Er der noget jeg skal have refereret til i mit dokument?
Men jeg får stadigvæk denne fejl, når jeg kun skriver...
public void DbClose() { //MySqlConnection SqlConnection = new MySqlConnection(strConn); //MySqlDataReader rdr = sel.ExecuteReader(CommandBehavior.CloseConnection); SqlConnection.Close(); }
\Database\DbConnector.cs(28): The type or namespace name 'SqlConnection' could not be found (are you missing a using directive or an assembly reference?)
hvis du skal arbejde med den samme forbindelse i to forskellige metoder i klassen skal du lave det til en klassevariabel.... altså definere den i toppen af klassen.
du bør så nok lave en property til den sådan her :
private MySqlConnection _connection;
protected MySqlConnection Connection { get { if(_connection == null) _connection = new MySqlConnection(...); return _connection; } }
men jeg synes nu stadig - med det kode du har vist indtil nu - ville være bedre tjent med at sikre at readeren selv lukker forbindelsen når den lukkkes (altså den med CommandBehavior.CloseConnection. mvh
i min kommentar 28/03-2005 16:36:49 har jeg både et field til MySqlConnection'en (conn) og en string til at opbevare conn-stringen i (strConn). Hvorfor kan du ikke bare bruge koden derfra?
Jeg har brugt koden derfra, og alt virker nu....man kan vel godt dele points kan man ikke?? Jeg giver dig points. og snepnet points på det andet spørgsmål.:-)
Synes godt om
Ny brugerNybegynder
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.