如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中

Posted

技术标签:

【中文标题】如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中【英文标题】:How to save SELECT sql query results in an array in C# Asp.net 【发布时间】:2013-12-04 18:51:43 【问题描述】:

如何将 SQL 查询的结果保存到数组中?

我想在 IF 语句中使用值(位于 col1 和 col2 中),这导致我想到将它们保存在数组中。

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

【问题讨论】:

【参考方案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。只是为了证明 C# 是类型安全的以及如何使用 DataReader.GetXY 方法。

【讨论】:

【参考方案2】:

您可以将数据加载到DataTable 中,而不是任何Array,例如:

using System.Data;

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 数据阅读器:

在此示例中,我使用列表而不是数组。

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(i).ToString() );
        i++;
    
    reader.Close();

catch (Exception)

    throw;

finally

    connection.Close();

【讨论】:

【参考方案4】:

尚未提及的一个很好的替代方案是使用实体框架,它使用一个对象即表 - 要将数据放入数组中,您可以执行以下操作:

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

有关开始使用实体框架的信息,请参阅https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

【讨论】:

【参考方案5】:

很简单:

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

【讨论】:

【参考方案6】:
    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; 
    

【讨论】:

基本上,代码会查找以识别查询返回的记录数,保存在变量中,然后再定义数组的大小。最后,它使用查询数据填充数组。 Global.arrayTest 在哪里定义?为什么Global 您好!我的选择在全局类中声明了该数组。它可以在方法本身中声明。 Global 类中的示例: //Globais Arrays private static string[] uso_internoArray1;公共静态字符串 [] arrayTest 获取 返回 uso_internoArray1; 设置 uso_internoArray1 = 值;

以上是关于如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给 jQuery document.ready() 函数(ASP.NET MVC、C#)

如何在 asp.net c# 中将 JQuery DataTables 应用于 Gridview 以获取大数据(> 1000)?

在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错

在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript

在 C# 的 asp.net 下拉列表中的 select2 上设置多个选定值

C# ASP.NET SQL 数据源