此代码使用什么数据集? SqlDataAdapter.Fill(DataTable) 的文档使它们听起来是强制性的

问题描述 投票:0回答:3

以下代码改编自Microsoft's code here。因此,这显然是正确的。

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        ReturnIdentity(connectionString);
    }

    private static void ReturnIdentity(string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            // Create a SqlDataAdapter based on a SELECT query.
            SqlDataAdapter adapter = new SqlDataAdapter("SELECT CategoryID, CategoryName FROM dbo.Categories", connection);

            // Create a DataTable and fill it.
            DataTable categories = new DataTable();
            adapter.Fill(categories);
        }
    }

    static private string GetConnectionString()
    {
       return "Your Connection String";
    }  
}

尽管这个显然正确的代码不包含我能找到的

DataSet
the documentation for the
Fill
method called with
adapter.Fill(categories)
重复提到
DataSet
s,好像它们在某种程度上是相关的/强制性的使用
Fill(DataTable)
类的
SqlDataAdapter
方法。

这给了我我的问题:在上面的代码中,

DataSet
出现在哪里?我想不出任何阅读
SqlDataAdapter.Fill(DataTable)
的文档都不会让人觉得你绝对需要一个。

c# .net dataset ado.net sqldataadapter
3个回答
0
投票

您需要在备注部分阅读此内容:

以DataTable为参数的Fill重载,只得到第一个结果。使用以 DataSet 作为参数的 Fill 重载来获取多个结果。

所以我们看到只有在查询批处理可能有多个结果集时才需要数据集。


0
投票

也许以下内容会有所帮助:

  • A DataSet 由表、关系和约束的集合组成。在 ADO.NET 中,DataTable 对象用于表示 DataSet 中的表。 DataTable 表示内存中关系数据的一个表;数据对于它所在的基于 .NET 的应用程序是本地的,但可以使用 DataAdapter 从数据源(例如 Microsoft SQL Server)填充有关详细信息,请参阅从 DataAdapter 填充数据集

  • 以DataTable为参数的Fill的重载只得到第一个结果。使用以 DataSet 作为参数的 Fill 重载来获取多个结果。

所以,看看上面的代码,重载使用 DataTable 作为参数,因此(根据文档),将使用 DataSet 中的第一个结果。

我认为对 DataSet 的引用与 SqlDataAdapter 有关 - 它“在幕后”使用 DataSets 并且 Fill 方法可以接受 DataTable 参数,然后从底层 DataSet 填充该参数。


-1
投票

SqlDataAdapter 类有多个 Fill 的重载版本,它们接受不同的参数,包括 DataSet 和 DataTable 实例。有关完整列表,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.