为了账号安全,请及时绑定邮箱和手机立即绑定

C# 关于 Dataset 的fill 方法?

C# 关于 Dataset 的fill 方法?

慕容708150 2019-02-06 11:07:39
例如://创建SqlConnection数据库连接对象SqlConnection Conn = new SqlConnection(sConnectionString); //打开ConnConn.Open();//创建并初始化SqlCommand对象SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);DataSet ds = new DataSet();//使用SqlDataAdapter的Fill方法填充DataSetCustomer.Fill(ds, "Customers");DataTable tblCustomers; //创建一个DataTable数据表tblCustomers = ds.Tables["Customers"];//关闭数据连接Conn.Close ( ) ; 疑问:Customer.Fill(ds, "Customers");这句中"Customers" 是什么意思?有什么用处?不是直接用Customer.Fill(ds) 就可以了吗?
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

关于 Dataset 的fill 方法:

    使用DataAdapter填充DataSet

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

    1.使用DataAdapter填充DataSet

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

12345rowsAffected = aDataAdapter.Fill(DataSet);    rowsAffected = aDataAdapter.Fill(DataSet,strDataTableName);    rowsAffected = aDataAdapter Fil](DataTable);

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

1aDataset.EnforceConstraints=false;

     使用Datadapter填充DataSet。

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

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

123456789101112131415SqlDataAdapter 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对象。代码如下:

1234567891011121314151617string 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方法。

1234567cn.Open();    daCusomers.Fill(ds);    daOrders.Fill(ds);    cn.Close();

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

12345678910111213141516171819202122232425//创建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 ( ) ;



查看完整回答
反对 回复 2019-03-15
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

Customers 代表存储的表名 如果只是一张表的话就没多大用处了,但在多表的时候就有用处了

查看完整回答
反对 回复 2019-03-15
  • 3 回答
  • 0 关注
  • 1390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信