gpt4 book ai didi

C# 和 SQLite : Resource to Array

转载 作者:行者123 更新时间:2023-11-30 15:36:06 25 4
gpt4 key购买 nike

我正在使用 SQLite 查询数据库。我试图从这个数据库中获取数据,将其保存在一个数组中,然后返回到 Controller 。我需要在我的 View 中使用 foreach 循环来呈现这些数据。

string sql = "select * from Tasks Where UserId = " + userId.ToString();
using (SQLiteConnection conn = new SQLiteConnection(connString))
{
SQLiteCommand cmd = new SQLiteCommand(sql, conn);
conn.Open();
using (SQLiteDataReader rdr = cmd.ExecuteReader())
{
int i = 0;
while (rdr.Read())
{
//here is what i would do in PHP
$array[$i]['name'] = $rdr[i]["name"];
$array[$i]['key'] $rdr[$i]["key"];
}
}
}

return array;

最佳答案

首先,学习使用参数化查询而不是字符串连接,因为这有助于防止 SQL 注入(inject)攻击。

string sql = "select * from Tasks Where UserId = @userId";

此外,如果您创建一个类来表示您的 Tasks 中的记录table 然后你可以构建这个对象的实例并将它们返回到一个列表中,这将使使用代码更容易,因为你将拥有一个具有属性的对象而不是无类型数组(在你看来你可以做 foreach (var task in Model) where Model是一个 List<Task>

public class Task
{
public int Id { get; set; }
public string Name { get; set; }
public string Key { get; set; }
}

var tasks = new List<Task>(); // create a list to populate with tasks

using (var connection = new SQLiteConnection(connString))
{
var command = new SQLiteCommand(sql, conn);
command.Parameters.Add("@userId", userId); // only do .ToString on userId if the column is a string.

connection.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var task = new Task();
task.Id = (int)reader["id"]; // the name of the column in the reader will match the column in the Tasks table.
task.Name = (string)reader["name"];
task.Key = (string)reader["key"];

tasks.Add(task);
}
}
}

return tasks;

无需编写所有查询逻辑和创建对象,您可以使用名为 Object Relational Mappers (ORM) 的框架为你做这件事。周围有很多,有些比其他的更简单。 MicroORM 可能适合您的目的,它们简单易用(我构建了一个名为 MicroLite 的,但还有其他的,例如 dapper 或 PetaPoco。如果您想要更强大的东西,NHibernate 和 Entity Framework 是流行的选择。

关于C# 和 SQLite : Resource to Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com