gpt4 book ai didi

c# - 在 ASP.NET 中从数据库中获取一行数据的最有效方法

转载 作者:太空狗 更新时间:2023-10-29 22:21:10 24 4
gpt4 key购买 nike

我正在编写一种方法来从数据库中返回“ Assets ”行。它包含字符串、整数和字节数组(这可以是图像/电影/文档)。

现在,对于大多数行访问,我使用以下返回 NameValueCollection 的方法,因为它是一个轻量级对象,易于使用和转换 int 和字符串。

        public static NameValueCollection ReturnNameValueCollection(Database db, DbCommand dbCommand)
{

var nvc = new NameValueCollection();

using (IDataReader dr = db.ExecuteReader(dbCommand))
{
if (dr != null)
{
while (dr.Read())
{
for (int count = 0; count < dr.FieldCount; count++)
{
nvc[dr.GetName(count)] = dr.GetValue(count).ToString();
}
}
}
}

dbCommand.Dispose();
return nvc.Count != 0 ? nvc : null;
}

现在我对这种数据访问的方法通常是获取一个返回数据行的方法。

       public static DataRow ReturnDataRow(Database db, DbCommand dbCommand)
{
var dt = new DataTable();

using (IDataReader dr = db.ExecuteReader(dbCommand))
if (dr != null) dt.Load(dr);

dbCommand.Dispose();
return dt.Rows.Count != 0 ? dt.Rows[0] : null;
}

创建 DataTable 然后返回其第一个数据行似乎有点浪费。

有更好的方法吗?

我在想也许是一个对象字典,然后我手动转换其中的每个成员。

看看其他人如何解决这个问题会很有趣。我知道这有点属于微优化领域,只要我不为每一行查询返回数据集(希望我每次在代码行中看到它时都能得到一个英镑)它应该没问题。

也就是说,可能会调用此方法来分配一个盒子上的站点分配数据访问查询。

干杯

史蒂夫

最佳答案

最近怎么样?

您没有代表数据库中一行的对象容器是有原因的吗?在解决方案的其他层中创建自定义对象更容易处理。因此,采用这种方法,您的问题有两种非常可行的解决方案。

假设您有一个自定义对象,代表您数据库中的一个产品。您可以这样定义对象:

public class Product {
public int ProductID { get; set; }
public string Name { get; set; }
public byte[] Image { get; set; }
}

然后您将像这样填充产品(集合)的集合:

var collection = new Collection<Product>();

using (var reader = command.ExecuteReader()) {
while (reader.Read()) {
var product = new Product();

int ordinal = reader.GetOrdinal("ProductID");
if (!reader.IsDBNull(ordinal) {
product.ProductID = reader.GetInt32(ordinal);
}

ordinal = reader.GetOrdinal("Name");
if (!reader.IsDBNull(ordinal)) {
product.Name = reader.GetString(ordinal);
}

ordinal = reader.GetOrdinal("Image");
if (!reader.IsDBNull(ordinal)) {
var sqlBytes = reader.GetSqlBytes(ordinal);
product.Image = sqlBytes.Value;
}

collection.Add(product);
}
}

请注意,我正在通过读取器的 Getx 检索值,其中 x 是我要从列中检索的类型。这是 Microsoft 推荐的检索列数据的方法 http://msdn.microsoft.com/en-us/library/haa3afyz.aspx (第二段)因为检索到的值不必装箱到 System.Object 中也不必拆箱为原始类型。

由于您提到此方法将在 ASP.NET 应用程序中被调用很多次,您可能需要重新考虑像这样的通用方法。您用来返回 NameValueCollection 的方法在这种情况下性能很差(并且可以说在许多其他情况下)。更不用说将每个数据库列转换为字符串而不考虑当前用户的文化,而文化是 ASP.NET 应用程序中的重要考虑因素。我认为这个 NameValueCollection 也不应该用于您的其他开发工作。我可以继续谈论这个,但我会为你省去我的咆哮。

当然,如果您要创建直接映射到您的表的对象,您不妨查看 LINQ to SQLADO.NET Entity Framework .你会很高兴你做到了。

关于c# - 在 ASP.NET 中从数据库中获取一行数据的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757246/

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