15 messaggi dal 13 agosto 2004
Salve a tutti,
sono nuovo all'ambiente ASP.NET e provengo da PHP... Vengo al sodo ponendovi questo mio

problema:
come si fa in ASP.NET a creare una variabile diciamo "collection" (come in questo esempio PHP è $retUser) contenente più valori derivati dal "fetch_object" di PHP? Utile perché poi il contenuto lo si richiama semplicemente con $retUser->.... .
Nell'esempio "fetcho" in $retUser valori di campi di database di $userID salvati in $result


function xforum_getUserByID($userID)
{
$retUser = new CUser;
$result = mysql_query("SELECT * FROM Users WHERE UserID=" . abs($userID));
if ($result == 0) {
echo(mysql_error());
return $retUser;
}
if (mysql_num_rows($result) <= 0) {
return $retUser;
}
$row_object = mysql_fetch_object($result);
$retUser->userID = $row_object->UserID;
$retUser->username = $row_object->Username;
$retUser->nickname = $row_object->Nickname;
$retUser->email = $row_object->EMail;
...
...
return $retUser;
}

e poi li posso usare in funzioni per richiamarne i valori, es.:

$user_object = xforum_getUserByID($userID);

if ($user_object->userLevel == 0 ....

Esiste un metodo simile in ASP.NET?
Graze
la cosa migliore è definire una classe User con proprietà UserID, Username, email, ecc...

ad es., in C#
public class myUser
{
  public myUser()
  {
    //...eventuale codice di inizializzazione della classe...
  }

  // variabili locali della classe
  private string userid;
  private string userName;
  private string email;

  // proprietà per esporre le informazioni all'esterno
  public string UserID
  {
    get{return userid;}
    set{userid = value;}
  }
  // altre proprietà .....
}

Poi potresti eventualmente sviluppare un metodo (analogo a xforum_getUserByID) che, leggendo dati dal DB, restituisca un oggetto di tipo myUser, o addirittura creare un overload del costruttore con un parametro userID, che, tramite il tier data accede al database e inizializza opportunamente le variabili userName, email, ecc...
public myUser(int myUserID)
{
  // Lettura dati da DB
  DataRow rw = mysql_query("SELECT * FROM Users WHERE UserID=" + myUserID.ToString());

  // Inizializzazione della classe
  userid = myUserID;
  userName = (string) rw["Username"]:
  email = (string) rw["Email"];
  // ecc....
}


Spero di esserti stato d'aiuto
15 messaggi dal 13 agosto 2004
Grazie Cradle. Quindi un oggetto simile non esiste in .NET. L'idea di crearmi un metodo in uno User Control OK il problema che a questo punto mi sorge (al di là del metodo fetch_object di PHP) è: siccome vorrei usare l'oggetto per i vari database, dovrei creare un metodo per ritornarmi i campi delle row e relativi tipi per poi istanziarli (non uno ad uno come nel metodo proposto), per non fare un oggetto per ogni caso particolare...
Cosa proponete? Io ci to studiando...
15 messaggi dal 13 agosto 2004
Grazie Cradle. Quindi un oggetto simile non esiste in .NET. L'idea di crearmi un metodo in uno User Control OK il problema che a questo punto mi sorge (al di là del metodo fetch_object di PHP) è: siccome vorrei usare l'oggetto per i vari database, dovrei creare un metodo per ritornarmi i campi delle row e relativi tipi per poi istanziarli (non uno ad uno come nel metodo proposto), per non fare un oggetto per ogni caso particolare...
Cosa proponete? Io ci to studiando...
15 messaggi dal 13 agosto 2004
Grazie Cradle. Quindi un oggetto simile non esiste in .NET. L'idea di crearmi un metodo in uno User Control OK il problema che a questo punto mi sorge (al di là del metodo fetch_object di PHP) è: siccome vorrei usare l'oggetto per i vari database, dovrei creare un metodo per ritornarmi i campi delle row e relativi tipi per poi istanziarli (non uno ad uno come nel metodo proposto), per non fare un oggetto per ogni caso particolare...
Cosa proponete? Io ci to studiando...
Beh, personalmente ho l'abitudine di creare una classe nel layer business per ogni entità logica che vado ad utilizzare nella mia applicazione (sono un fan del three-tier :D)...
ad esempio, se stessi creando un forum, creerei una classe
ForumSection
contenente (tra le altre cose) una collection di classi
ForumThread
con, a loro volta, una collection di classi
ForumMessage.

Poi, ad esempio, ForumThread ha proprietà quali ThreadLocked, Title, ecc...
mentre su ForumMessage ho Author, Date, Time, ecc.ecc...

Il tutto, magari, slegato dall'effettiva fonte dati che c'è sotto, letta da un metodo di una classe di tipo DBForum che restituisce un oggetto ForumSection.
15 messaggi dal 13 agosto 2004
Non voglio eccedere con la tua pazienza... ma questa logica di strutturazione del codice va bene, il mio problema però è inerente una generica lettura di database ristretta ad aree riservate a seconda dei privilegi. Quindi l'oggetto è generico:
1. eseguo login
2. controllo pw in database
3. restituisco userID
4. con questo userID creo oggetto che carica tutti i riferimenti (tramite field name) alle entità presenti nella riga abilitata all'utente.
5. valori dei campi richiamabili tramite parametro nome campo nell'oggetto.
Es. di utilizzo: gestione profilo utente...

Credo di avvicinarmi a quanto desidero usando il metodo GetSchemaTable integrando la tua proposta di oggetto
Modificato da gordian il 18 agosto 2004 14.42 -
Uhm... non ti seguo più
Riusciresti ad essere più preciso?

Io credevo che il tuo problema consistesse nella realizzazione di una struttura dati in C#. Ora è ovvio che, per l'approccio object oriented, devi sapere anticipatamente che tipo di dati andrai a trattare in modo da costruire una classe appropriata per gestirli. Se invece il tuo problema è semplicemente quello di risalire ai nomi dei campi e ai valori restituiti da una query SQL, una soluzione potrebbe essere quella di utilizzare una DataTable popolata da un DataAdapter.

es. con database SQL Server
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(stringaSQL, stringaConnessione);
da.Fill(dt);

A questo punto la tua DataTable dt contiene tutti i dati recuperati dal DB tramite la query (e tutto ciò senza conoscerne preventivamente lo Schema)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.