[C#] Problema accedere a dati matrice bidimensionale

sabato 09 luglio 2011 - 00.03

marf Profilo | Newbie

Salve a tutti, è da poco che sono entrato nel mondo di C#, ma ho già alcuni problemi: ho uno script che preleva tramite una query dei dati da un database mysql.

Ad esempio ho una tabella utenti che per record ha un campo id, username, password ecc...

Con C# prelevo i dati tramite questa funzione al quale passo la stirnga sql con la quale fare la query:

public ArrayList seleziona(string sql)
{
MySqlConnection mysqlCon = new MySqlConnection(strProvider);
mysqlCon.Open();
MySqlCommand mysqlCmd = new MySqlCommand(sql,mysqlCon);
MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();

ArrayList al = new ArrayList();

while (mysqlReader.Read())
{
object[] values = new object[mysqlReader.FieldCount];
mysqlReader.GetValues(values);
al.Add(values);
}

mysqlReader.Close();






mysqlCon.Close();
return al;

}

L'array al che viene creato quando richiamo la funzione tramite il debug ha tutti i dati giusti, ma se vado tipo a digitare al[0][0] da errore perchè lo vede come un object e scrive:

Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'object'

Perchè vede il primo indice della matrice come un object[5] dove 5 è il numero campi, sapete come faccio ad accedere ai risultati dell'object tipo all'id utenti del primo record che sarebbe al[0][0]?


Grazie in anticipo,


Marco

Cteniza Profilo | Guru

Un'arraylist è un oggetto che contiene una o più serie di array-
Non si tratta di un array multidimensionale ma di un contenitore.
Se scorri l'arraylist puoi, mediante cast opportuno, riottenere l'array che hai appeso alla collection.

marf Profilo | Newbie

Quindi se volessi accedere (ovviamente non essendo un array multidimensionale il termine è errrato, però rende l'idea) al contenuto [0][0] come dovrei fare, scusate, ma sono nuovo di C# ed ho provato in tutti i modi ma non so proprio come fare.

Cteniza Profilo | Guru

Piccolo esempio:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ArrayList myList = new ArrayList(); string[] stuno = { "a", "b" }; myList.Add(stuno); string[] stdue = { "x", "y","z" }; myList.Add(stdue); foreach (string[] s in myList) { foreach (string x in s) { Console.WriteLine(x); } } Console.ReadKey(); } } }

marf Profilo | Newbie

Sì, avevo visto un esempio simile, il problema è quello fa un loop, io volevo senza loop prelevare un dato che scelgo io dall'array list tipo...

aiedail92 Profilo | Expert

>io volevo senza loop prelevare un dato che scelgo io dall'array
>list tipo...

Basta fare un cast:

object val = ((object[])al[0])[0];

In alternativa la cosa migliore da fare è usare una collection generica, con elementi di tipo object[]:

using namespace System; using namespace System.Collections.Generic; // ... List<object[]> al = new List<object[]>(); // Aggiungi gli elementi object[] values = { "1", 3.14, "3" }; al.Add(values); string[] strs = { "a", "b", "c" }; al.Add(strs); // Ottieni gli elementi object val = al[0][1];


Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5