如何在 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