wake-up-neo.com

So speichern Sie SELECT-SQL-Abfrageergebnisse in einem Array in C # Asp.net

Ich habe diese Abfrage geschrieben, um einige Ergebnisse zu erhalten, wenn ich die Ergebnisse in einem Array speichern möchte, was muss ich tun? Ich möchte die Werte in col1 und col2 in einer IF-Anweisung verwenden, deshalb denke ich, sie in einem Array zu speichern. 

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

Normalerweise benutze ich dafür eine Klasse:

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

Jetzt können Sie eine Schleife verwenden, um eine Liste zu füllen, und ToArray, wenn Sie wirklich ein Array benötigen:

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();
    }
}

Ich habe angenommen, dass die erste Spalte eine string und die zweite eine integer ist. Nur um zu zeigen, dass C # typsicher ist und wie Sie die DataReader.GetXY-Methoden verwenden.

29
Rango

Anstelle von Array können Sie Ihre Daten in DataTable laden:

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);
        }
    }
}

Sie können auch SqlDataAdapater verwenden, um Ihre DataTable ähnlich zu füllen

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

Später können Sie jede Zeile durchlaufen und wie folgt vergleichen:

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

Verwenden Sie einen SQL-Datenleser:

In diesem Beispiel verwende ich eine Liste anstelle eines Arrays.

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

Ziemlich einfach:

 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

Eine großartige Alternative, die bisher nicht erwähnt wurde, ist die Verwendung des Entitätsframeworks, bei dem ein Objekt verwendet wird, bei dem es sich um die Tabelle handelt. Um Daten in ein Array zu bekommen, können Sie Folgendes tun:

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

informationen zum Einstieg in Entity Framework finden Sie unter 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