2013-11-20 9 views
15

Napisałem to zapytanie, aby uzyskać pewne wyniki, jeśli chcę zapisać wyniki w tablicy, co mam zrobić? Chcę użyć wartości, które są w col1 i col2 w instrukcji IF, dlatego myślę, aby zapisać je w tablicy.Jak zapisać wyniki kwerend SELECT w tablicy w C# Asp.net

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

Odpowiedz

28

Normalnie używam klasę na to:

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

Teraz można użyć pętli, aby wypełnić listę i ToArray jeśli naprawdę potrzebujesz tablicy:

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

Należy pamiętać, że Zakładam, że pierwsza kolumna to string, a druga to integer. Tylko po to, aby zademonstrować, że kod C# jest bezpieczny dla typów i sposób korzystania z metod DataReader.GetXY.

14

Zamiast jakiegokolwiek Array można załadować danych w DataTable jak:

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

Można również użyć SqlDataAdapater do wypełnienia DataTable jak

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

Później można iteracyjne każdy wiersz i porównać jak :

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

Użyj SQ L CZYTNIK DANYCH:

W tym przykładzie używam Listy zamiast tablicy.

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

Dość proste:

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

Doskonałą alternatywą, która nie została wymieniona jest w użyciu Entity Framework, który używa obiektu, który znajduje się tabela - aby uzyskać dane do tablicy MOŻESZ robić takie rzeczy jak:

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

do informacji na temat rozpoczynania pracy z Entity Framework zobaczyć https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

Powiązane problemy