示例中DataTable添加至DataSet的方式及Fill方法相关疑问
解答你的DataTable与DataSet相关疑问
问题1:如何将DataTable添加到DataSet中?
有两种常用的实现方式:
- 手动添加实例:先创建
DataTable对象,配置好列结构、数据后,通过DataSet.Tables.Add()方法将其加入DataSet,示例代码如下:DataSet ds = new DataSet(); DataTable dt = new DataTable("MyCustomTable"); // 给dt添加列、填充数据的逻辑... ds.Tables.Add(dt); - 通过DataAdapter自动创建并添加:也就是你代码里用到的方式,调用
DataAdapter.Fill(ds, "TableName")时,方法会自动生成对应名称的DataTable,填充查询结果后将它加入到DataSet的Tables集合中。
问题2:代码中新的DataTable是如何创建的?是否由SqlDataAdapter的.Fill方法创建?
没错,这个DataTable就是由SqlDataAdapter.Fill(ds, "TableName")方法创建并自动填充数据的。
关于你找不到Fill(DataSet, string)重载的困惑:你查看的System.Data.Common.DataAdapter基类文档里其实是存在这个重载的——它属于DataAdapter类的公共方法之一,可能你浏览文档时没留意到重载列表里的这一项。SqlDataAdapter继承自DbDataAdapter,而DbDataAdapter又继承自DataAdapter,所以它能直接调用这个基类的重载方法。
当你调用da.Fill(ds, "TableName")时,方法内部会按以下逻辑执行:
- 在传入的
DataSet中查找名为"TableName"的DataTable,如果找不到就自动创建一个新实例 - 执行预设的SQL查询,把结果集填充到这个
DataTable里 - 将填充好的
DataTable加入到DataSet.Tables集合中,所以你能通过ds.Tables[0]获取到它
内容的提问来源于stack exchange,提问作者crazyPen
相关产品推荐
相关产品推荐

