C# 关于 Dataset 的fill 方法

例如://创建SqlConnection数据库连接对象SqlConnectionConn=newSqlConnection(sConnectionString);//打开... 例如:
//创建SqlConnection数据库连接对象

SqlConnection Conn = new SqlConnection(sConnectionString);

//打开Conn

Conn.Open();

//创建并初始化SqlCommand对象

SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);

DataSet ds = new DataSet();

//使用SqlDataAdapter的Fill方法填充DataSet

Customer.Fill(ds, "Customers");

DataTable tblCustomers; //创建一个DataTable数据表

tblCustomers = ds.Tables["Customers"];

//关闭数据连接

Conn.Close ( ) ;

疑问:Customer.Fill(ds, "Customers");
这句中"Customers" 是什么意思?有什么用处?不是直接用Customer.Fill(ds) 就可以了吗?
展开
 我来答
xiangjuan314
2015-11-18 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2908万
展开全部

关于 Dataset 的fill 方法:

    使用DataAdapter填充DataSet

在选择了DataAdapter的类型(SqlDataAdapter或OleDbDataAdapter)并配置了DataAdapter来执行所需的任务之后,可以用创建的DataAdapter来填充DataSet。

    1.使用DataAdapter填充DataSet

可以使用DataAdapter来填充DataSet。调用DataAdapter的Fill方法,并指定要填充的DataSet表。Fill方法隐式执行DataAdapter的SelectCommand中的SQL查询,查询的结果用于定义DataSet表的结构,并用数据来填充表。此外,Fill方法是可重载的。例如:

rowsAffected = aDataAdapter.Fill(DataSet);   

rowsAffected = aDataAdapter.Fill(DataSet,strDataTableName);   

rowsAffected = aDataAdapter Fil](DataTable);

当填充DataSet时,DataAdapter会强制一些约束,例如主键唯一性。为了提高性能,在填充DataSet前将EnforceConstraints属性设置为false,这将在数据加载过程中禁用约束检查。

aDataset.EnforceConstraints=false;

     使用Datadapter填充DataSet。

下面创建一个DataSet,它包含一个名为Department的表。使用名为daDepartment的DataAdapter来填充该表,并调用BeginLoadData方法来优化性能。

填充完该表之后,将一个DataGridView控件绑定到该表,该DataGridView将在屏幕上显示信息。

SqlDataAdapter daDept = new SqlDataAdapter(   

"select * from humanresources.department", cn);   

DataSet dsDept = new DataSet();   

dsDept.Tables.Add(new DataTable("Department"));   

dsDept.Tables[0].BeginLoadData();   

daDept.Fill(dsDept,"Department");   

dsDept.Tables[0].EndLoadData();   

dataGridView1.DataSource = dsDept.Tables["Department"];

    DataAdapter和Command在如何处理Connection对象上有一个主要的区别:在调用一个Command对象的执行方法前,将打开与该Command相关联的Connection对象,否则Command会抛出一个异常;DataAdapter则没有这样的需求。

    如果要调用DataAdapter对象的Fill方法,并且SelectCommand属性的Connection已经关闭,DataAdapter将自动打开连接、提交查询、提取结果,然后关闭Connection。读者也许会发现DataAdapter非常有条不紊,它总是将SelectCommand属性的Connection恢复到其初始状态。但是如果在调用Fill方法之前已经打开Connection,调用以后Connection仍然处于打开状态。因此使用DataAdapter的Fill方法时,不需要手工打开Connection。

     但在一些特殊情况下,也需要在执行DataAdapter的Fill方法之前先打开Connection。例如,在应用程序启动时,用多个DataAdapter对象将多个查询的结果填充到DaraSet中。可以使用DataAdapter对象的构造函数强制每个DataAdapter都使用相同的Connection对象。代码如下:

string strConn = "Provider=SQLOLEDB;Data Souroe=(local)"+   

            "Initial catalog=Northwind;Trusted_connection=Yes;";   

OleDbConnection cn = new OleObconnection(strconn);   

OleDbOataAdapter daCustomers,daOrders;   

daCustomers = new OleDbDataAdapter("SELECT ... FROM Customers",cn);   

daOrders = new OleDbDataAdapter("SELECT ... FROM orders",cn);   

ds=new DataSet();   

daCustomers Fill(ds):   

daOrders.Fill(ds);

    实际上,当两次打开和关闭Connection时,每次都调用DataAdapter对象的Fill方法。为了避免重复地多次打开和关闭Connection对象,在对DataAdapter对象调用Fill方法之前,先调用Connection对象的Open方法。如果要在填充数据以后关闭Connection,则应该像下面例子中显示的那样调用Close方法。

cn.Open();   

daCusomers.Fill(ds);   

daOrders.Fill(ds);   

cn.Close();

    总结以上所说,一个完整的算法可以这样写:

//创建SqlConnection数据库连接对象

SqlConnection Conn = new SqlConnection(sConnectionString);

//打开Conn

Conn.Open();

//创建并初始化SqlCommand对象

SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);

DataSet ds = new DataSet();

//使用SqlDataAdapter的Fill方法填充DataSet

Customer.Fill(ds, "Customers");

DataTable tblCustomers; //创建一个DataTable数据表

tblCustomers = ds.Tables["Customers"];

//关闭数据连接

Conn.Close ( ) ;
灬砼点瓜两0h
推荐于2018-03-07 · TA获得超过118个赞
知道答主
回答量:87
采纳率:0%
帮助的人:82.2万
展开全部
Customer是个适配器,数据库对于dataset的数据流通就是通过适配器来实现的,数据库好比一个壶,SqlDataAdapter 就好比个漏斗,Dataset就好比个瓶子,整个过程就好比壶通过漏斗往瓶子里倒水,水就是数据。直接用Customer.Fill(ds)也是可以的,第一次Fill,都会在dataset中产生一个表,这个表的名字就是“Customers”,当一次填充多个表的时候 , 就不能这样Customer.Fill(ds)写了,必须把后面的名字写上
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
此生の孤独
2010-12-02
知道答主
回答量:43
采纳率:0%
帮助的人:0
展开全部
Customers 代表存储的表名 如果只是一张表的话就没多大用处了,但在多表的时候就有用处了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
原听然015
2010-12-02 · TA获得超过2415个赞
知道小有建树答主
回答量:1390
采纳率:100%
帮助的人:1140万
展开全部
Customers 代表存储的表名 如果只是一张表的话就没多大用处了,但在多表的时候就有用处了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式