Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    18

    [C#]Comportamento anomalo return DataSet

    Ciao a tutti,

    non mi spiego il comportamento del seguente WebMethod:
    codice:

    codice:
    [WebMethod]
            public DataSet Neigh()
            {
                DataSet v = new DataSet("Vicini");
                String connString = cs.ConnectionString;
                SqlConnection conn = new SqlConnection(connString);
                try
                {
                    conn.Open();
    
                    SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Vicini", conn);
                    Int32 x = (Int32)command.ExecuteScalar();
                    command = new SqlCommand("Select * from Vicini", conn);
                    SqlDataAdapter adapter = new SqlDataAdapter(command);
                    adapter.Fill(v);
                    Globals.Vicini = v;
    
                    if (v.Tables[0].Rows.Count != 0 && !v.Tables[0].Rows[0][0].ToString().Trim(" \n".ToCharArray()).Equals("http://localhost/SRnode0"))
                    {
                        remoteservice.Url = v.Tables[0].Rows[0][0].ToString().Trim(" \n".ToCharArray()) + "/WS.asmx";
                        v = remoteservice.Neigh();
                        
                        Globals.Merge(v);
                    }
    
                }
    
                catch (Exception ex)
                {
    
                    throw ex;
                }
                conn.Close();
                return Globals.Vicini;
            }

    In particolare, come si vede dal codice, all'interno dell'if richiamo lo stesso WebMethod su un altro indirizzo. Eseguendo il debug questo riempie Globals.Vicini con il DataSet risultante dalla Select precedente, non entra nel blocco if perchè non ci deve entrare, e restituisce Globals.Vicini.

    Al return nel chiamante però mi ritrovo un DataSet null che causa eccezione quando richiamo Globals.Merge sui miei vicini.

    A cosa può essere dovuto?

    Per favore AIUTATEMIIII!!!

    PS.perdonate il post duplicato nella sezione ASP.NET, ma ho sbagliato come si fa a toglierlo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    ... non entra nel blocco if perchè non ci deve entrare, e restituisce Globals.Vicini.
    Ma non ci entra perchè non ci deve entrare o perchè le righe del dataset sono 0 ???
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    18
    No il count è !=0 è per l'altra condizione, ma comunque anche se la select non restituisca nulla, il DataSet dovrebbe essere inizializzato
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.Fill(v);
    Globals.Vicini = v;

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Primo non capisco a cosa serve questa query:

    codice:
     SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Vicini", conn);
     Int32 x = (Int32)command.ExecuteScalar();
    Secondo non capisco cosa sia Globals.vicini, sicuramente è un Dataset, una variabile static di una classe?
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    18
    Primo non capisco a cosa serve questa query:

    codice:
    SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Vicini", conn);
    Int32 x = (Int32)command.ExecuteScalar();
    Per avere il numero di vicini. Non lo perchè ne copia/incolla del codice ho tolto delle parti che sono ininfluenti hai fini del problema.

    Secondo non capisco cosa sia Globals.vicini, sicuramente è un Dataset, una variabile static di una classe?
    Si, esatto è una variabile Dataset setatic della classe Globals. Global.Vicini è la proprietà. Ecco il codice della classe

    codice:
    public class Globals
        {
            private String client_id = "";
            private static DataSet v=new DataSet("Vicini");
            public String id_client
            {
                get { return client_id; }
                set { client_id = value; }
            }
    
            public static void Merge(DataSet x)
            {
                v.Merge(x);
            }
    
            public static DataSet Vicini
            {
                get
                {
                    return v;
                }
                set
                {
                    v = value;
                }
            }
        }

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ok, scusa ma allora cosa serve una funzione se poi imposti una proprietà static di una classe nella stessa funzione ??

    Non è che imposti a Null da qualche parte nel codice il dataset v ??
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    18
    Grazie per i suggerimenti, non ho capito il motivo, del comportamento. Però risolto diversamente il problema grazie per i consigli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.