SqlDataAdapter.Fill 方法 (DataTable) 在msdn 上的解释是
Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。 与 SELECT 语句关联的连接对象必须有效,但不需要将其打开。 如果调用 Fill 之前连接已关闭,则将其打开以检索数据,然后再将其关闭。 如果调用 Fill 之前连接已打开,它将保持打开状态。
然后,Fill 操作将行添加到 DataSet 中的目标 DataTable 对象,如果 DataTable 对象不存在,则创建这些对象。 当创建 DataTable 对象时,Fill 操作通常只创建列名元数据。 但是,如果 MissingSchemaAction 属性设置为 AddWithKey,则还会创建适当的主键和约束。
如果 DbDataAdapter 在填充 DataTable 时遇到重复列,它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。 如果传入数据包含未命名的列,它们将按“Column1”、“Column2”的模式放在 DataSet 中。 向DataSet 添加多个结果集时,每个结果集都放在一个单独的表中。
采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果。 使用以 DataSet 作为参数的 Fill 重载将获取多个结果。
SqlDataAdapter ada = new SqlDataAdapter(cmd); 的时候,如果存储过程中 最后一句不是 select 语句 ,则获取不到 数据 , 所以个人认为 采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果 ,这句话 应该改为 采用 DataTable 作为参数的 Fill 的重载仅获取所有 非 查询 语句后的 第一个查询结果