c# - SqlDataReader 与 SqlDataAdapter : which one has the better performance for returning a DataTable?

标签 c# performance datatable sqldatareader sqldataadapter

我想知道哪个在返回 DataTable 时性能更好。这里对于 SqlDataReader 我使用 DataTable.Load(dr)

使用 SqlDataReader:

public static DataTable populateUsingDataReader(string myQuery)
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(constring))
    {
        SqlCommand cmd = new SqlCommand(myQuery, con);
        con.Open();
        SqlDataReader dr = null;
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        if (dr.HasRows)
        {
            dt.Load(dr);
        }
        return dt;
    }
}

使用 SqlDataAdapter:

public DataTable populateUsingDataAdapter(string myQuery)
{
    SqlDataAdapter dap = new SqlDataAdapter(myQuery,cn);
    DataSet ds = new DataSet();
    dap.Fill(ds);
    return ds.Tables[0];
}

最佳答案

差异可以忽略不计,因此最好使用更简洁的版本:SqlDataAdapter.Fill

SqlDataReader.Fill在内部创建一个内部类LoadAdapter(派生自DataAdapter),并调用它的Fill方法:性能将与 SqlDataAdapter.Fill(DataTable) 非常相似。

参数的初始化/验证会有一些小差异,但随着行数的增加,这会变得越来越不重要。

另请注意,应修改您的第二个样本以与第一个样本进行比较:

public DataTable populateUsingDataAdapter(string myQuery)
{
    using (SqlConnection con = new SqlConnection(constring))
    {
        SqlDataAdapter dap = new SqlDataAdapter(myQuery,con);
        DataTable dt = new DataTable();
        dap.Fill(dt);
        return dt;
    }
}

关于c# - SqlDataReader 与 SqlDataAdapter : which one has the better performance for returning a DataTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999143/

相关文章:

c# - 如何在我的程序中使用非常大的字符串(5 亿个字符)?

IE8 中的 Javascript 非常慢,IE7 + 其他使用 jQuery、jQuery UI、nyroModal 的速度很快

c# - 转置数据表

javascript - 使用 Ajax 的数据表

c# - 绑定(bind)源是带有属性路径的字符串

c# - Process.Start() 可以考虑系统路径吗?

c# - Interlocked.Exchange<T> 是 Microsoft 的预期 Swap 方法吗?

sql-server - 针对 400 万条记录的两个截然不同的查询同时执行 - 其中一个使用暴力破解

C#控制台应用程序,退出缓慢

jsf - 如何使用 <h :selectBooleanCheckbox> in <h:dataTable> or <ui:repeat> to select multiple items?