这是从数据库检索数据到业务逻辑层的最快捷有效的方法吗?
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;
}
答案 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。我这样做不是出于性能原因 - 从长远来看,持久层更易于维护。