这是从数据库中检索数据的最快捷有效的方法吗?

时间:2011-03-14 01:39:21

标签: c# .net tsql

这是从数据库检索数据到业务逻辑层的最快捷有效的方法吗?

public static DataTable Getdata(Guid companyId)
{
    DbCommand command = db.GetStoredProcCommand("dbo.P_GetData");
    db.AddInParameter(command, "@company_id", DbType.Guid, companyId);
    IDataReader reader = db.ExecuteReader(command);
    DataTable data = new DataTable();
    data.Load(reader, LoadOption.OverwriteChanges);
    reader.Close();
    return data;
}

3 个答案:

答案 0 :(得分:1)

这取决于你的要求..

有很多方法可以从数据库中检索数据。

在Ado.net中,可以使用datareader和数据适配器。他们都有自己的优势。

你也可以使用Linq to sql

并查看此性能比较:数据访问技术

http://msdn.microsoft.com/en-us/library/ms978388.aspx

问候。

答案 1 :(得分:1)

根据nawfal的基准:

出于某种原因Fill()

dataAdapter.Fill(dataSet);

更快Load()

dataTable.Load(dataReader);

例如,像这样的东西可能比你拥有的东西快4-5倍:

using (var da = new MySqlDataAdapter())
{
    using (da.SelectCommand = conn.CreateCommand())
    {
        da.SelectCommand.CommandText = query;
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds.Tables[0];
    }
}

有关详细信息和基准时间,请参阅他的回答。

答案 2 :(得分:0)

假设您的逻辑层需要DataTable,而忽略其他编码问题和要求,这可能会非常快。

你有理由相信它对你的需求来说太慢吗?如果是这样,尝试不同的方法,不要忽视:

  • 运行查询的存储过程使用的逻辑及其生成的计划
  • 存储过程返回的数据量(您是否需要所有这些列?)
  • 干预网络的带宽,如果有的话

编辑:如果我正在做这样的事情,如果我正在使用合理规模的数据模型,并且如果我对业务层有影响力,我会使用持久性框架(如Entity Framework )而不是直接的ADO.NET。我这样做不是出于性能原因 - 从长远来看,持久层更易于维护。