Avatar billede decrypto Nybegynder
28. marts 2005 - 01:41 Der 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);
}
Avatar billede fyrenanders Nybegynder
28. marts 2005 - 01:55 #1
0et forslag ud af en miliard muligheder (hvis jeg da har forstået dit spørgsmål korrekt!)

på din side lav en label eller ligende

i kode skriver du så bare:

labelnavn.Text+=denværdiduvilharud.ToString();
Avatar billede burningice Nybegynder
28. marts 2005 - 09:30 #2
Avatar billede snepnet Nybegynder
28. marts 2005 - 10:56 #3
Eller skriv ud til Skærmen med Response.Write(...);

men du kan jo også bare se dine værdier ved at debugge.

mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 11:21 #4
Jeg har provet at bruge response.write, men det kommer ikke ud på siden.
Avatar billede burningice Nybegynder
28. marts 2005 - 11:28 #5
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
Avatar billede decrypto Nybegynder
28. marts 2005 - 11:45 #6
Hey cyberprofessor glad for at du er her idag....

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.
Avatar billede snepnet Nybegynder
28. marts 2005 - 11:47 #7
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 ?

mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 11:52 #8
Jeg bruger visual studio og  det udsnit I ser er fra en klasse.

Jeg sender lige hele udsnittet
------------------------------------

//Hent indkøbskurv
public ArrayList GetCart()
{
string strSql = "SELECT DISTINCT product.id AS product_id, product_category.photo_id AS prod_cat_photo_id, product.supplier_id, product.photo_id AS prod_photo_id, shopping_cart.guid, shopping_cart.amount, product.name AS product_name, product.price as product_price, product.description AS product_description FROM product INNER JOIN product_category ON (product.id = product_category.product_id) INNER JOIN shopping_cart ON (product_category.product_id = shopping_cart.product_id) WHERE guid = '"+ guid +"'ORDER BY product_name;";
    DbConnector dbCon = new DbConnector();
    MySqlDataReader rdr = dbCon.DbConnect(strSql);
    System.Web.HttpContext.Current.Response.Write(rdr["product_name"].ToString());

    ArrayList arrLstCart = new ArrayList();
       
    while (rdr.Read())
    {
    CartData c = new CartData();
           
    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);
        }
dbCon.DbClose();
return arrLstCart;
}

Som I kan se forsøger jeg at returnere et ArrayList til sidst, men jeg mistænker det for at være tomt, selvom det ikke burde være det.
Avatar billede snepnet Nybegynder
28. marts 2005 - 11:57 #9
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).

mvh
Avatar billede snepnet Nybegynder
28. marts 2005 - 11:59 #10
(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
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:04 #11
her en lille hurtig intro med screendumps :
http://www.dnzone.com/ShowDetail.asp?NewsId=63
mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:28 #12
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.
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:30 #13
det ser ikke ud til at du eksekverer din reader.
mvh
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:32 #14
kender ikke DBConnector, men normalt vil du have noget :

MySqlConnection con = new MySqlConnection(...);
MySqlCommand command = new MySqlCommand(..., con);
MySqlDataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
osv...

mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:33 #15
Hvordan gør jeg det? Remember jeg er quite a newb. :O)
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:35 #16
Nåh ja hovsa DBConnector er en jeg selv har lavet, den indholder eksekveringen. Og den fungerer fint.
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:36 #17
Her er min DBConnector klasse

    public class DbConnector
    {
        private string strConn = "Database=ecommerce;Data Source=localhost;User Id=root;Password=skywalker";

        public MySqlDataReader DbConnect(string strSql)
        {
            MySqlConnection SqlConnection = new MySqlConnection(strConn);
            SqlConnection.Open();

            MySqlCommand sel = new MySqlCommand(strSql, SqlConnection);
            MySqlDataReader rdr = sel.ExecuteReader();
            return rdr;
        }

        public void DbClose()
        {
            MySqlConnection SqlConnection = new MySqlConnection(strConn);
            SqlConnection.Close();
        }
    }
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:37 #18
Så den giver mig ikke problemer.
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:39 #19
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).

mvh
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:40 #20
Når du returnerer en reader på den måde bør du nok lave en :
MySqlDataReader rdr = sel.ExecuteReader(CommandBehavior.CloseConnection);

På den måde bliver din forbindelse lukket når du lukker readeren.

mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:49 #21
Jeps sql strengen fungerer fint, har testet, den i en anden klasse.
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:50 #22
Den linje adder jeg vel bare i min DBClose metode?
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:51 #23
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
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:53 #24
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?)
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:54 #25
System.Data.CommandBehavior.CloseConnection
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:56 #26
Den prøver vi lige med det samme...
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:58 #27
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?)
Avatar billede decrypto Nybegynder
28. marts 2005 - 12:59 #28
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.
Avatar billede snepnet Nybegynder
28. marts 2005 - 12:59 #29
hvis du vil lave en using skal den bare hedde :

using System.Data;
(Så kan du bare skrive CommandBehavior.CloseConnection)

Det jeg skrev før var bare det fulde navn så du kunne bruge det i metoden.

mvh
Avatar billede snepnet Nybegynder
28. marts 2005 - 13:00 #30
bare stil dig på linien og tryk på F9 når du vil indsætte breakpoints.
mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:01 #31
Ok, jeg har fundet ud af det med breakpoint. Det skal åbentbart være på en kodelinje, og ikke en tom linje. :o)
Avatar billede snepnet Nybegynder
28. marts 2005 - 13:02 #32
jeps :o)
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:03 #33
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....
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:04 #34
Efter at have sat et breakpoint lige før løkken kan jeg se at den når dertil.
Avatar billede snepnet Nybegynder
28. marts 2005 - 13:05 #35
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
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:11 #36
Lort. #"¤_"#¤234

FEJL 40!!!!! min id passer ikke med den der er i databasen, så det klar den ikke finder noget resultat
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:13 #37
Så nu kommer der fejl i min løkke, det er da en positiv start...
Avatar billede snepnet Nybegynder
28. marts 2005 - 13:14 #38
jeps - så går det fremad :o)
mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:18 #39
All right!!!! SÅ nu viser den den rightige længde på mit ArrayList. Spørgsmålet er hvodan hiver jeg elementerne ud af denne ArrayList en efter en?
Avatar billede snepnet Nybegynder
28. marts 2005 - 13:23 #40
du skal bare typecaste til din type når du trækker elementer ud :
f.eks.

CartData data = (CartData)dinArrayList[2];

mvh
(jeg bliver nødt til at smutte nu, men er tilbage igen om en times tid).
Avatar billede decrypto Nybegynder
28. marts 2005 - 13:32 #41
Glad for hjælpen. No problem
Avatar billede snepnet Nybegynder
28. marts 2005 - 15:00 #42
hvordan går det med det ?
mvh
Avatar billede burningice Nybegynder
28. marts 2005 - 16:34 #43
hvis man bruge en foreach kan man også lave en automatisk cast

foreach (CartData cd in list) {
  // Gør noget med cd, som er et CartData-object
}
Avatar billede burningice Nybegynder
28. marts 2005 - 16:36 #44
der er forresten en noget grum forseelse i din db-klasse:

  public void DbClose()
        {
            MySqlConnection SqlConnection = new MySqlConnection(strConn);
            SqlConnection.Close();
        }

Du opretter en ny connection for at lukke den igen med det samme? Det får du ikke så meget ud af. Du bør i stedet gøre det sådan her:

public class DbConnector
    {
        private string strConn = "Database=ecommerce;Data Source=localhost;User Id=root;Password=skywalker";
        private MySqlConnection conn;

        public MySqlDataReader DbConnect(string strSql)
        {
            conn = new MySqlConnection(strConn);
            conn.Open();

            MySqlCommand sel = new MySqlCommand(strSql, conn);
            MySqlDataReader rdr = sel.ExecuteReader(CommandBehavior.CloseConnection);
            return rdr;
        }

        public void DbClose()
        {
            conn.Close();
        }
    }
Avatar billede decrypto Nybegynder
28. marts 2005 - 16:49 #45
Mange tak. Jeg kan også selv se det nu.
Avatar billede decrypto Nybegynder
28. marts 2005 - 16:51 #46
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?)

Er der noget jeg ikke ser????
Avatar billede decrypto Nybegynder
28. marts 2005 - 16:53 #47
Jeg prøver lige dit eksempel...
Avatar billede decrypto Nybegynder
28. marts 2005 - 16:56 #48
Ved at bruge dit eksempel får jeg denne fejl

\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?
Avatar billede burningice Nybegynder
28. marts 2005 - 17:11 #49
du skal stadig huske at importere System.Data, lader til at det er samme problem som i

28/03-2005 12:59:56
Avatar billede decrypto Nybegynder
28. marts 2005 - 17:28 #50
Ja, det er rigtigt.
Avatar billede decrypto Nybegynder
28. marts 2005 - 17:48 #51
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?)
Avatar billede snepnet Nybegynder
28. marts 2005 - 17:52 #52
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;
  }
}

mvh
Avatar billede snepnet Nybegynder
28. marts 2005 - 17:53 #53
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
Avatar billede decrypto Nybegynder
28. marts 2005 - 17:59 #54
Vi prøver....
Avatar billede decrypto Nybegynder
28. marts 2005 - 18:50 #55
...og det virker...
Avatar billede decrypto Nybegynder
28. marts 2005 - 18:53 #56
Hey drenge hvis I vil have points så send bare svar ind. Prøver at se om jeg kan dele pointsne.

Jeg mangler bare det sidste med at pakke min ArrayListe ud i mit 'main program'.

CartContent a = new CartContent();
ArrayList cardArray = a.GetCart();

Mit cardArray indholder al yummies, hvordan hiver jeg det ud drnge?
Avatar billede snepnet Nybegynder
28. marts 2005 - 19:39 #57
du kan bare bruge den som cyberfessor skrev, hvis du vil have dem alle ud :

foreach(CartData cd in cardArray)
{
  // ...
}

og... hvis du bare vil have fat i en bestemt :
CartData cd = (CardData)cardArray[x];

mvh
Avatar billede decrypto Nybegynder
28. marts 2005 - 19:48 #58
Sådan der drenge så vanker der points.
Så har jeg netop taget det første største skridt i .Net verdenen. Tak for tålmodigheden.
Avatar billede decrypto Nybegynder
28. marts 2005 - 19:53 #59
En lille sidste ting, hvad betyder...

\Database\DbConnector.cs(23): Identifier expected

og det er denne linje der fejer:

_connection = new MySqlConnection(strConn);

i denne kode block:

22  if(_connection == null)
23     _connection = new MySqlConnection(strConn);
24  return _connection;
Avatar billede decrypto Nybegynder
28. marts 2005 - 19:53 #60
Det er vel ikke {} eller hvad?
Avatar billede snepnet Nybegynder
28. marts 2005 - 20:12 #61
strConn skal være din connectionstring... den kunne du så have i en setting, eller en konstant eller noget... f.eks. en klassevariabel :

private const string strConn = "<hvordan den nu er>";

mvh
Avatar billede burningice Nybegynder
28. marts 2005 - 23:08 #62
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?

:)
Avatar billede decrypto Nybegynder
29. marts 2005 - 16:53 #63
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.:-)
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