Подтвердить что ты не робот

Как сохранить результаты запроса SELECT sql в массиве в С# Asp.net

Я написал этот запрос, чтобы получить некоторые результаты, если я хочу сохранить результаты в массиве, что мне нужно делать? Я хочу использовать значения, которые находятся в col1 и col2 в выражении IF, поэтому я собираюсь сохранить их в массиве.

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

Ответ 1

Обычно я использую класс для этого:

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

Теперь вы можете использовать цикл для заполнения списка и ToArray, если вам действительно нужен массив:

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

Обратите внимание, что я предположил, что первый столбец - это string, а второй - integer. Просто чтобы продемонстрировать, что С# является типичным и как вы используете методы DataReader.GetXY.

Ответ 2

Вместо любого Array вы можете загрузить свои данные в DataTable, например:

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

Вы также можете использовать SqlDataAdapater, чтобы заполнить свой DataTable, например

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

Позже вы можете перебирать каждую строку и сравнивать, как:

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

Ответ 3

С помощью ЧИТАТЕЛЯ ДАННЫХ SQL:

В этом примере я использую List вместо массива.

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

Ответ 4

Довольно легко:

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