ADO.NET学习之SqlDataAdapter,DataSet
来源:互联网 发布:黎活明 知乎 编辑:程序博客网 时间:2024/06/06 15:01
ADO.NET学习之SqlDataAdapter
ADO.NET
提供了2中data access
模式
1.Connection oriented data access
2.Disconnected data access
下面说第二种Disconnected data access
,2个类SqlDataAdapter
和DataSet
DataSet
是个内存数据存储,可以持有一个或多个table
。DataSet
只是持有数据,并不和底层的数据表做交互。DataSet
对象并不知晓底层的数据源。
要在DataSet
中提取记录并将它们填入表中,需要使用另一个ADO.NET
对象DataAdapter
(如SqlDataAdapter
)
为了让DataAdapter
能够编辑、删除或者添加行,需要设定DataAdapter
对象的InsertCommand
、UpdateCommand
和DeleteCommand
属性。利用DataAdapter
填充DataSet
时,必须设定SelectCommand
DataAdapter
的方法:
Fill()
执行SelectCommand
中的查询后,向DataSet
添加一个DataTable
。如果查询返回多个结果集,该方法将一次添加多个DataTable
对象。还可以用该方法向现有的DataTable
添加数据Update()
检查DataTable
中的所有变化,并执行适当的InsertCommand
、UpdateCommand
和DeleteCommand
操作,为数据源执行批量更新
步骤:
1.创建SqlDataAdapter
对象,指定一个命令和一个connection对象
string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;SqlConnection connection = new SqlConnection(connectionString);string selectQuery = "Select * from tblStudents";SqlDataAdapter dataAdapter = new SqlDataAdapter(selectQuery, connection);
2.调用SqlDataAdapter.Fill()
方法
DataSet dataSet = new DataSet();dataAdapter.Fill(dataSet, "Students");
3.DataSet
中数据的改变并不会影响底层的数据
4.要更新底层数据库表中的数据,调用SqlDataAdapter.Update()
方法
dataAdapter.Update(DataSetObject, "Students");
SqlDataAdapter
在前面的章节中讲到了SqlDataReader
,是 connection oriented
,意味着需要一个活动的,被打开连接的 data source
。而SqlDataAdapter
和 DataSet
给我们提供了一种disconnected data access model
创建SqlDataAdapter
对象,参数
1.执行的sql
命令
2.执行命名的connection
如下的例子:
string CS = ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(CS)) { SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from tblProductInventory02", con); DataSet dataset = new DataSet(); dataAdapter.Fill(dataset); GridView1.DataSource = dataset; GridView1.DataBind(); }
1.创建SqlDataAdapter
对象,需要的参数(SqlCommandText
和 connection
对象)
2.创建DataSet
对象,DataSet
是内存数据存储,可存储表,就像数据库一样
3.Fill()
方法,打开数据的连接,执行sql
命令,使用数据填充dataset
,然后关闭数据库连接。
使用SqlDataAdapter
执行存储过程
创建如下的存储过程:
Create procedure spGetProductInventory asBegin Select ProductId, ProductName, UnitPrice from tblProductInventoryEnd
想要使用SqlDataAdapter
执行存储过程spGetProductInventory
,需指定存储过程的名称:
SqlDataAdapter dataAdapter = new SqlDataAdapter("spGetProductInventory", connection);dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
执行带有参数的存储过程
如下的存储过程:
Create procedure spGetProductInventoryById@ProductId intasBegin Select ProductId, ProductName, UnitPrice from tblProductInventory where ProductId = @ProductIdEnd
执行spGetProductInventoryById
,如下:
SqlDataAdapter dataAdapter = new SqlDataAdapter("spGetProductInventoryById", connection); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; dataAdapter.SelectCommand.Parameters.AddWithValue("@ProductId", 1); DataSet dataset = new DataSet(); dataAdapter.Fill(dataset);
DataSet
这节要讲的内容:
1.加载2个或者更多的table到DataSet
中
2.把DataSet与用户接口绑定起来,如使用GridView
先创建如下的存储过程,执行这个存储过程,会获取到2
个结果集
Create procedure spGetProductAndCategoriesDataasBegin Select ProductId, ProductName, UnitPrice from tblProductInventory Select CategoryId, CategoryName from tblProductCategoriesEnd
在webform中添加2个GridView ,修改ID属性:
<asp:GridView ID="GridViewProducts" runat="server"></asp:GridView><br /><asp:GridView ID="GridViewCategories" runat="server"></asp:GridView>
获取数据:
string ConnectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;using (SqlConnection connection = new SqlConnection(ConnectionString)){ SqlDataAdapter dataAdapter = new SqlDataAdapter("spGetProductAndCategoriesData", connection); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; DataSet dataset = new DataSet(); dataAdapter.Fill(dataset); GridViewProducts.DataSource = dataset.Tables[0]; GridViewProducts.DataBind(); GridViewCategories.DataSource = dataset.Tables[1]; GridViewCategories.DataBind();}
默认情况下,DataSet
的table
名字如Table
, Table1
, Table2
等,你可以给它指定一个更有意义的名字:
dataset.Tables[0].TableName = "Products";dataset.Tables[1].TableName = "Categories";
在使用的时候,如下:
GridViewProducts.DataSource = dataset.Tables["Products"];GridViewProducts.DataBind();GridViewCategories.DataSource = dataset.Tables["Categories"];GridViewCategories.DataBind();
Cache DataSet
缓存DataSet
首先检查是否在缓存中存在,然后从缓存中加载
protected void btnLoadData_Click(object sender, EventArgs e) { if (Cache["data"] == null) { string CS = ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(CS)) { SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from tblProductInventory02", con); DataSet dataset = new DataSet(); dataAdapter.Fill(dataset); Cache["data"] = dataset; gvProducts.DataSource = dataset; gvProducts.DataBind(); lblMessage.Text = "Data loaded from the database"; } } else { gvProducts.DataSource = (DataSet)Cache["data"]; gvProducts.DataBind(); lblMessage.Text = "Data loaded from the Cache"; } }
移除缓存的DataSet
protected void btnClearCache_Click(object sender, EventArgs e) { if (Cache["data"] != null) { Cache.Remove("data"); lblMessage.Text = "The dataset removed from the cache"; } else { lblMessage.Text = "There is nothing to be removed"; } }
资源
- SqlDataAdapter in ADO.NET - Part 10
- DataSet in asp.net - Part 11
- Caching dataset in asp.net - Part 12
理解DataSet、DataTable、DataColumn
内容来自ADO.NET : Working with DataSet, DataTable, DataColumn, DataRow and DataRelations
ADO.NET
的类为两大类:
Connected
-Connected
的类是允许你检索和更新数据源中数据的类。该类别中最重要的类是Connection
,DataReader
,DataAdapter
类Disconnected
-Disconnected
类允许你使用Connected
类对数据进行脱机访问和操作的功能。你可以使用Connected
类同步对Disconnected
类所做的更改。最重要的Disconnected
类是DataSet
,DataTable
,DataColumn
,DataRow
,DataRelation
类
DataSet.Tables
集合里的每个项目是一个DataTable
。DataTable
又包含自己的集合-DataColumn
对象的Columns
集合(它描述每个字段的名称和数据类型)以及DataRow
对象的Rows
集合(它包含每条记录的真正数据)
创建DataColumn
绑定到DataTable
//创建DataTable DataTable dt = new DataTable("MyTable"); //创建第一列 DataColumn column1 = dt.Columns.Add(); column1.ColumnName = "First"; column1.DataType = typeof(int); column1.DefaultValue = 0; column1.Unique = true; column1.AllowDBNull = false; //创建第二列 DataColumn column2 = new DataColumn(); column2.ColumnName = "Second"; column2.DataType = typeof(string); column2.MaxLength = 25; dt.Columns.Add(column2); //创建第三列 dt.Columns.Add("Third", typeof(string)).MaxLength = 40; //创建第四列和第五列 DataColumn column4 = new DataColumn("Fourth"); column4.DataType = typeof(int); DataColumn column5 = new DataColumn("Firth", typeof(decimal)); dt.Columns.AddRange(new DataColumn[] { column4, column5 });
可以使用DataTable.Columns.AddRange
添加多个DataColumns
添加DataRow
到DataTable
参考:
- Dynamically create DataTable and bind to GridView in ASP.Net
- How to: Add Rows to a DataTable
如下:
DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), new DataColumn("Name", typeof(string)), new DataColumn("Country",typeof(string)) }); dt.Rows.Add(1, "John Hammond", "United States"); dt.Rows.Add(2, "Mudassar Khan", "India"); dt.Rows.Add(3, "Suzanne Mathews", "France"); dt.Rows.Add(4, "Robert Schidner", "Russia"); GridView1.DataSource = dt; GridView1.DataBind();
创建DataTable
绑定到DataSet
//创建一个DataSet对象 DataSet ds = new DataSet("MyDataSet"); //添加一个名为Table-1的DataTable DataTable table1 = ds.Tables.Add("Table-1"); //在这里配置它,添加一些column DataTable table2 = new DataTable("Table-2"); ds.Tables.Add(table2); DataTable table3 = new DataTable("Table-3"); DataTable table4 = new DataTable("Table-4"); ds.Tables.AddRange(new DataTable[] { table3, table4 });
- ADO.NET学习之SqlDataAdapter,DataSet
- ADO.NET之SqlDataAdapter
- 黑马程序员之ADO.NET学习笔记: SqlDataAdapter(数据适配器)
- ADO.NET读书笔记系列之------SqlDataAdapter对象
- ADO.NET读书笔记系列之------SqlDataAdapter对象
- ADO.NET 中的 SqlDataAdapter
- 黑马程序员之ADO.NET学习笔记:SqlDataReader和SqlDataAdapter 区别
- ADO.NET—Asp.net 用DataSet对象更新数据(SqlDataAdapter)
- ASP.NET动态网站开发培训-32.ADO.NET技术(四、SqlDataAdapter类与DataSet类)
- (转载)ADO.NET读书笔记系列之------SqlDataAdapter对象
- ADO.NET之SqlDataAdapter对数据库增加、删除、修改篇
- 学习笔记》ADO.NET》在ADO.NET中使用DataSet
- ADO.NET读书笔记系列之------DataSet对象
- ADO.NET读书笔记系列之------DataSet对象
- ADO.NET之强类型DataSet
- ADO.NET读书笔记系列之------DataSet对象
- ADO.NET读书笔记系列之------DataSet对象
- ADO.NET读书笔记系列之------DataSet对象
- Qt学习01——字符串类
- 如何学习新技术
- Java线程 CompletionService
- java求质数,例子1-100
- ORACLE 查询高水位表 脚本
- ADO.NET学习之SqlDataAdapter,DataSet
- 特殊字符,# + %在url中传递,encode方式加密处理
- Android App异常退出时重新启动
- Core ML 与 Vision:iOS 11 机器学习教程
- Jackson详解一
- ubuntu16.04备份以及恢复
- eclipse不编译的原因
- myeclipse打不开了,进度条进到十分之一就闪退,什么提示都没有,解决方案
- 数据自动化整理