SqlDataAdapter.Fill() 与 DataTable.Load()

Dr.*_*ail 5 c# sql sqldatareader sqldataadapter

我来自这里的这个问题,但我有一个不同的案例。我需要我的结果DataTable,我有两种可能的方法:

public static DataTable SelectDataTable(string query, string ConnectionString)
{       
    using (SqlConnection myConnection = new SqlConnection(ConnectionString))
    {
        using (SqlDataAdapter myDataAdapter = new SqlDataAdapter(query, myConnection))
        {
            DataTable dt = new DataTable();
            myDataAdapter.Fill(dt);
            return dt;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

public static DataTable SelectDataTable(string query, string ConnectionString)
{
    using (SqlConnection myConnection = new SqlConnection(ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand(query, myConnection))
        {
            myConnection.Open();
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
            return dt;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:两者之间有区别吗

SqlDataAdapter+Fill() SqlDataReader+ DataTable+Load()

更喜欢哪种方法?

乔尔的回答非常详细,是什么让这个问题不重复

事实上,我并没有使用SqlDataReader我使用它来填充 DataTable 的所有提到的优点,这让我期待答案是这样的:它是一样的?!不幸的是,很难猜测引擎盖下发生了什么。

J. *_*ood 1

除非您正在处理大数据,否则我不希望使用 dataReader 而不是 dataAdapter 获得巨大的性能提升。

话虽如此, Pawel发布的链接有一篇相当不错的文章,解释了两者的差异和优点。

主要的要点是读者是用来阅读数据的。除此之外,他们什么也没做。

因为它们不做太多其他事情,所以它们的性能开销相对较低。

DataAdapter 将允许您做比 Readers 更多的事情,但就您而言,听起来除了读取记录之外您不需要做任何事情。

重申一下,除非您正在处理大数据(例如数十万/数百万行),否则我预计使用 dataReader 所节省的性能不会非常明显。

只有您在使用自己的数据进行基准测试时才能确定这一点。

如果这能消除您对 DataAdapter 和 DataReader 之间差异的任何困惑,请告诉我们。