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