web-dev-qa-db-fra.com

Comment enregistrer les résultats d'une requête SELECT SQL dans un tableau en C # Asp.net

J'ai écrit cette requête pour obtenir des résultats, si je veux enregistrer les résultats dans un tableau, que dois-je faire? Je veux utiliser les valeurs qui sont dans col1 et col2 dans une instruction IF, c'est pourquoi je pense les enregistrer dans un tableau. 

var con = new SqlConnection("Data Source=local;Initial Catalog=Test;Integrated Security=True");

using (con)
using (var command = new SqlCommand("SELECT col1,col2 FROM  some table", con))
{
   con.Open();
   command.ExecuteNonQuery();
}
15
Kamran

Normalement, j'utilise un cours pour cela:

public class ClassName
{
    public string Col1 { get; set; }
    public int Col2 { get; set; }
}

Maintenant, vous pouvez utiliser une boucle pour remplir une liste et ToArray si vous avez vraiment besoin d'un tableau:

ClassName[] allRecords = null;
string sql = @"SELECT col1,col2
               FROM  some table";
using (var command = new SqlCommand(sql, con))
{
    con.Open();
    using (var reader = command.ExecuteReader())
    {
        var list = new List<ClassName>();
        while (reader.Read())
            list.Add(new ClassName { Col1 = reader.GetString(0), Col2 = reader.GetInt32(1) });
        allRecords = list.ToArray();
    }
}

Notez que j'ai supposé que la première colonne est une string et la seconde une integer. Juste pour démontrer que C # est typé et comment vous utilisez les méthodes DataReader.GetXY.

29
Rango

Au lieu de Array, vous pouvez charger vos données dans DataTable comme ceci:

DataTable dt = new DataTable();
using (var con = new SqlConnection("Data Source=local;Initial Catalog=Test;Integrated Security=True"))
{
    using (var command = new SqlCommand("SELECT col1,col2" +
    {
        con.Open();
        using (SqlDataReader dr = command.ExecuteReader())
        {
            dt.Load(dr);
        }
    }
}

Vous pouvez également utiliser SqlDataAdapater pour remplir votre DataTable comme

SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dt);

Plus tard, vous pouvez parcourir chaque ligne et comparer comme ceci:

foreach (DataRow dr in dt.Rows)
{
    if (dr.Field<string>("col1") == "yourvalue") //your condition
    {
    }
}
14
Habib

Utilisez un lecteur de données SQL:

Dans cet exemple, j'utilise une liste à la place d'un tableau.

try
{
    SqlCommand comm = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories;",connection);
    connection.Open();

    SqlDataReader reader = comm.ExecuteReader();
    List<string> str = new List<string>();
    int i=0;
    while (reader.Read())
    {
        str.Add( reader.GetValue(0).ToString() );
    }
    reader.Close();
}
catch (Exception)
{
    throw;
}
finally
{
    connection.Close();
}
2
Stefano Bafaro

Plutôt facile:

 public void PrintSql_Array()
    {
        int[] numbers = new int[4];
        string[] names = new string[4];
        string[] secondNames = new string[4];
        int[] ages = new int[4];

        int cont = 0;

        string cs = @"Server=ADMIN\SQLEXPRESS; Database=dbYourBase; User id=sa; password=youpass";
        using (SqlConnection con = new SqlConnection(cs))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT * FROM tbl_Datos";
                con.Open();

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);

                foreach (DataRow row in dt.Rows)
                {
                    numbers[cont] = row.Field<int>(0);
                    names[cont] = row.Field<string>(1);
                    secondNames[cont] = row.Field<string>(2);
                    ages[cont] = row.Field<int>(3);

                    cont++;
                }

                for (int i = 0; i < numbers.Length; i++)
                {
                    Console.WriteLine("{0} | {1} {2} {3}", numbers[i], names[i], secondNames[i], ages[i]);
                }

                con.Close();
            }
        }
    }
1
Alex Martinez

Une excellente alternative qui n'a pas été mentionnée consiste à utiliser le cadre d'entité, qui utilise un objet qui est la table. Pour obtenir des données dans un tableau, vous pouvez effectuer les opérations suivantes:

var rows = db.someTable.SqlQuery("SELECT col1,col2 FROM  someTable").ToList().ToArray();

pour plus d'informations sur comment démarrer avec Entity Framework, voir https://msdn.Microsoft.com/en-us/library/aa937723(v=vs.113).aspx

1
TheRealZing
    public void ChargingArraySelect()
    {
        int loop = 0;
        int registros = 0;

        OdbcConnection conn = WebApiConfig.conn();
        OdbcCommand query = conn.CreateCommand();

        query.CommandText = "select dataA, DataB, dataC, DataD FROM table  where dataA = 'xpto'";

        try
        {
            conn.Open();
            OdbcDataReader dr = query.ExecuteReader();

            //take the number the registers, to use into next step
            registros = dr.RecordsAffected;

            //calls an array to be populated
            Global.arrayTest = new string[registros, 4];

            while (dr.Read())
            {
                if (loop < registros)
                {
                    Global.arrayTest[i, 0] = Convert.ToString(dr["dataA"]);
                    Global.arrayTest[i, 1] = Convert.ToString(dr["dataB"]);
                    Global.arrayTest[i, 2] = Convert.ToString(dr["dataC"]);
                    Global.arrayTest[i, 3] = Convert.ToString(dr["dataD"]);
                }
                loop++;
            }
        }
    }


    //Declaration the Globais Array in Global Classs
    private static string[] uso_internoArray1;
    public static string[] arrayTest
    {
        get { return uso_internoArray1; }
        set { uso_internoArray1 = value; }
    }
0
Cleber Pessoal