⑴ 请教: 以下是我个人的理解 1.dataset对象:官方网站说是数据的内存驻留表示形式 如果它属于内存数据库,
1,首先内存不是共享的,一个用户拥有自己独立的一块内存,在一般情况下,别的程序是无法查看的【因此没有什么并发的问题,我是这么理解你的意思的】
2,缓存而已,一个用户搜到了100条数据,这100条数据放在dataset中,如果还需要此数据,直接从dataset中取,不需要连接数据库了
// 数据库才要早御考虑并发,dataset只是缓存,它是当前用户内存中模拟的数据库,不是真正的数据库,它本身没有处理数据的能力
3,都是服务器控件,没啥大的区别,asp.net服务器控件的存在意义就是跟C#完美结合袜袜,快速敏捷开发web项陆好岩目;html服务器控件存在的意义就是,html本身的那些控件,可以让你在服务器端进行处理了,两者都是服务器端处理,所以除了内部机制稍有不同,没有区别
=====================
我听你的意思还想在数据库中的数据更改后通知dataset?这显然是不可能的,因为连接已经断开了,数据库怎么通知你的程序?要想维持dataset 的数据是最新的, 就应该每隔一段时间(5分钟什么的)访问一次数据库,来保证你的数据是最新的。
如果你说你不让连接断开,这显然是不对的程序设计,因为数据库连接是有限的,你不放开连接,别人怎么用?
⑵ 深入分析ADO.NET中的DataSet对象
ADO NET是Net FrameWork SDK中用以操作数据库的类库的总称 而DataSet类则是ADO NET中最核心的成员之一 也是各种开发基于 Net平台程序语言开发数据库应用程序最常接触的类 之所以DataSet类在ADO NET中具有特殊的地位 是因为DataSet在ADO NET实现从数据库抽取数据中起到关键作用 在从数据库完成数据抽取后 DataSet就是数据的存放地 它是各种数据源中的数据在计算机内存中映射成的缓存 所以有时说DataSet可以看成是一个数据容器 同时它在客户端实现读取 更新数据库等过程中起到中间部件的作用(DataReader只能检索数据库中的数据)各种 Net平台开发语言开发数据库应用程序 一般并不直接对数据库操作(直接在程序中调用存储过程等除外) 而是先完成数据连接和通过数据适配器填充DataSet对象 然后客户端再通过读取DataSet来获得需要的数据 同让段晌样更新数据库中数据 也是首先更新DataSet 然后再通过DataSet来更新数据库中对应的数据的 可见了解 掌握ADO NET 首先必须了解 掌握DataSet DataSet主要有三个特性
独立性 DataSet独立于各种数据源 微软公司在推出DataSet时就考虑到各种数据源的多样性 复杂性 在 Net中 无论什么类型数据源 它都会提供一致的关系编程模型 而这就是DataSet
离线(断开)和连接 DataSet既可以以离线方式 也可以以实时连接来操作数据库中的数据 这一点有点像ADO中的RecordSet
DataSet对象是一个可以用XML形式表示的数据视图 是一种数据关系视图
一 DataSet对象的结构模型及和RecordSet的比较
虽说ADO NET是 ADO在 Net平台下得后继版本 但二者的区别是很大的 突出表现在ADO中的RecordSet对象和ADO NET中的DataSet对象 RecordSet其实也是非常灵活的一个对象 微软公司推出它也是煞费苦心 如 RecordSet可以离线操作数据库 性能优良 效率较高等等这些都让当时的程序员为之一振 RecordSet虽然已经很复杂 但DataSet却比RecordSet复杂的多 我们知道每一DataSet往往是一个或多个DataTable 对象的集合 这些对象由数据燃磨行和数据列以及主键 外键 约束和有关DataTable对象中数据的关系信息组成 而RecordSet只能存放单张数据表 虽然这张数据坦锋表可以由几张数据表JOIN生成 所以有些时候说 RecordSet更类似于DataSet中的DataTable DataSet对象的结构模型如图 所示
图 DataSet对象的结构模型图通过图 可见在DataSet对象结构还是非常复杂的 在DataSet对象的下一层中是DataTableCollection对象 DataRelationCollection对象和ExtendedProperties对象 上文已经说过 每一个DataSet对象是由若干个DataTable对象组成 DataTableCollection就是管理DataSet中的所有DataTable对象 表示DataSet中两个DataTable对象之间的父/子关系是DataRelation对象 它使一个DataTable 中的行与另一个DataTable中的行相关联 这种关联类似于关系数据库中数据表之间的主键列和外键列之间的关联 DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的 在DataSet中DataSet DataTable和DataColumn都具有ExtendedProperties属性 ExtendedProperties其实是一个属性集(PropertyCollection) 用以存放各种自定义数据 如生成数据集的SELECT语句等
二.使用DataSet
DataSet其实就是数据集 上文已经说过DataSet是把数据库中的数据映射到内存缓存中的所构成的数据容器 对于任何数据源 它都提供一致的关系编程模型 在DataSet中既定义了数据表的约束关系以及数据表之间的关系 还可以对数据表中的数据进行排序等 DataSet使用方法一般有三种
把数据库中的数据通过DataAdapter对象填充DataSet
通过DataAdapter对象操作DataSet实现更新数据库
把XML数据流或文本加载到DataSet
下面就来详细探讨以上DataSet使用方法的具体实现 使用语言是C#
把数据库中的数据通过DataAdapter对象填充DataSet
掌握DataSet使用方法必须掌握ADO NET另外一个核心常用成员 数据提供者(Data Provider) 数据提供者(也称为托管提供者Managed Provider)是一个类集合 在 Net FrameWork SDK 中数据提供者分为二种 The SQL Server NET Data Provider和The OLE DB NET Data Provider 而到了 Net FrameWork SDK 时 ADO NET中又增加了The ODBC NET Data Provider和 The Oracle NET Data Provider二个数据提供者 The SQL Server NET Data Provider的操作数据库对象只限于Sql Server 及以上版本 Oracle NET Data Provider的操作数据库对象只限于Oracle 及以上版本 而The OLE DB NET Data Provider和The ODBC NET Data Provider可操作的数据库类型就相对多了许多 只要它们在本地分别提供Ole Db提供程序和ODBC提供程序
在这些数据提供者中都有一个DataAdapter类 如 OLE DB NET Framework 数据提供者中是 OleDbDataAdapter类 The SQL Server NET Framework 数据提供者中是SqlDataAdapter类 The ODBC NET Framework 数据提供者中是OdbcDataAdapter类 通过这些DataAdapter就能够实现从数据库中检索数据并填充 DataSet 中的表
DataAdapter填充DataSet的过程分为二步 首先通过DataAdapter的SelectCommand属性从数据库中检索出需要的数据 SelectCommand其实是一个Command对象 然后再通过DataAdapter的Fill方法把检索来的数据填充 DataSet 代码清单 就是以Microsoft SQL Server 中的Northwind数据库为对象 C#使用The SQL Server NET Data Provider中的SqlDataAdapter填充DataSet的具体实现方法
代码清单
SqlConnection sqlConnection = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial Catalog=Northwind ) ;//创建数据连接SqlCommand selectCMD = new SqlCommand ( SELECT CustomerID CompanyName FROM Customers sqlConnection ) ;//创建并初始化SqlCommand对象SqlDataAdapter sqlDataAdapter = new SqlDataAdapter ( ) ;custDA SelectCommand = selectCMD ;sqlConnection Open ( ) ;//创建SqlDataAdapter对象 并根据SelectCommand属性检索数据DataSet dsDataSet = new DataSet ( ) ;sqlDataAdapter Fill ( dsDataSet Customers ) ;//使用SqlDataAdapter的Fill方法填充DataSetsqlConnection Close ( ) ;//关闭数据连接
对于其他数据提供者的DataAdapter 具体的实现检索数据库中的数据并填充DataSet的实现方法类似于以上方法
通过DataAdapter对象操作DataSet实现更新数据库
DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的 当DataSet实例中包含数据发生更改后 此时调用Update方法 DataAdapter 将分析已作出的更改并执行相应的命令(INSERT UPDATE 或 DELETE) 并以此命令来更新数据库中的数据 如果DataSet中的DataTable是映射到单个数据库表或从单个数据库表生成 则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand InsertCommand 和 UpdateCommand 使用DataAdapter对象操作DataSet实现更新数据库具体的实现方法 只需把下面的代码清单 添加到代码清单 之后 二者合并即可实现删除Customers数据表中第一行数据
代码清单
SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter ) ;//以sqlDataAdapter 为参数来初始化SqlCommandBuilder实例dsDataSet Tables[ Customers ] Rows[ ] Delete ( ) ;//删除DataSet中删除数据表Customers中第一行数据sqlDataAdapter Update ( dsDataSet Customers ) ;//调用Update方法 以DataSet中的数据更新从数据库dsDataSet Tables[ Customers ] AcceptChanges ( ) ;
由于不了解DataSet结构和与数据库关系 很多初学者往往只是更新了DataSet中的数据 就认为数据库中的数据也随之更新 所以当打开数据库浏览时发现并没有更新数据 都会比较疑惑 通过上面的介绍 疑惑应当能够消除了
XML和DataSet
DataSet中的数据可以从XML数据流或文档创建 并且 Net Framework可以控制加载XML数据流或文档中那些数据以及如何创建DataSet的关系结构 加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法(注意 ReadXml来加载非常大的文件 则性能会有所下降) ReadXml 方法将从文件 流或 XmlReader 中进行读取 并将 XML 的源以及可选的 XmlReadMode 参数用作参数 该ReadXml方法读取 XML 流或文档的内容并将数据加载到 DataSet 中 根据所指定的XmlReadMode和关系架构是否已存在 它还将创建DataSet的关系架构
三.DataSet和数据绑定(DataBinding)
数据绑定是数据绑定是绑定技术中使用最频繁 也是最为重要的技术 也可以说是各种 Net开发语言开发数据库应用程序最需要掌握的基本的知识之一 数据绑定之所以很重要 是因为在 Net FrameWork SDK中并没有提供数据库开发的相关组件 即如 DbTextBox DbLabel等用于数据库开发的常用组件在 Net FrameWork SDK中都没有 而数据绑定技术则能够把TextBox组件 改造 成DbTextBox组件 把Label组件 改造 成DbLabel组件等等 所有这些都与DataSet有直接关系
数据绑定分成二类 简单型数据绑定和复杂型数据绑定 适用于简单型数据绑定组件一般有Lable TextBox等 适用于复杂性数据绑定的组件一般有DataGrid ListBox ComboBox等 其实简单型数据绑定和复杂性数据绑定并没有明确的区分 只是在组件进行数据绑定时 一些结构复杂一点的组件在数据绑定时操作步骤相近 而另外一些结构简单一点的组件在数据绑定时也比较类似 于是也就产生了二个类别 以下就结合TextBox组件和DataGrid组件分别探讨DataSet在实现简单型数据绑定和复杂性数据绑定作用和具体实现方法
简单型数据绑定
简单型数据绑定一般使用这些组件中的DataBindings属性的Add方法把DataSet中某一个DataTable中的某一行和组件的某个属性绑定起来 从而达到显示数据的效果 TextBox组件的数据绑定具体实现方法是在代码清单 后 再添加代码清单 中的代码 代码清单 中的代码是把DataSet中的Customers 数据表中的 CustomerID 的数据和TextBox的Text属性绑定起来 这样DbTextBox就产生了 其他适用于简单型数据绑定组件数据绑定的方法类似与此操作
代码清单
textBox DataBindings Add ( Text dsDataSet Customers CustomerID ) ;
复杂性数据绑定
复杂性数据绑定一般是设定组件的DataSource属性和DisplayMember属性来完成数据绑定的 DataSource属性值一般设定为要绑定的DataSet DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列 DataGrid组件的数据绑定的一般实现方法是在代码清单 后 再添加代码清单 中的代码 代码清单 的功能是把DataSet中的Customers 数据表和DataGrid绑定起来 其他适用于复杂性数据绑定的组件实现数据绑定的方法类似此操作
代码清单
dataGrid DataSource = dsDataSet ;dataGrid DataMember = Customers ;
四.总结
lishixin/Article/program/net/201311/14485
⑶ c#关于DATASET的操作
问题1:要么写存储过程调用,要么就写多个sql语句烂团来实现问题2:首行就是第一次循环的结果,这岁脊里可以用sql语句控制下,top 1 。 if (dr.HasRows)
{
if (dr.Read())
{
txtCompanyName.Value = dr["T_CompanyName"].ToString();
txtLink.Value = dr["T_CompanyTel"].ToString();
txtFax.Value = dr["T_CompanyFax"].ToString();
txtMail.Value = dr["T_CompanyMail"].ToString();
txtNo.Value = dr["T_CompanyNo"].ToString();
txtAdress.Value = dr["T_CompanyAdress"].ToString();
}
dr.Close();
dr.Dispose();
} 这样获取结果显示 就可以饥雀橘了
⑷ C#动态生成DataSet,设置列标题的问题
DataTable mydatatb = new DataTable();
mydatatb.Columns.Add("列灶和弊名", typeof(string));
newCustomersRow["列名隐族"棚尺] = Convert.ToString(myds.Tables[0].Rows[i][0]);//0表示第一列
mydatatb.Rows.Add(newCustomersRow);
⑸ 遍历dataset生成SQL语句
这慧坦样不行把。
public
static
DataSet
GetSQL(DataSet
pid)
{
string
sql
=
"select
pusername,ppurpose,pphone,pemail
from
[person]
where
";
froeach(dataRow
dr
in
pin.Table[0].Row)
{
sql+="sql="+dr["pid<字段名御耐称>"].ToString();
}
}
这镇碧春样应该就可以了。
希望对你有帮助。
⑹ 如何使用DataSet修改数据库
使用 DataAdapter 更新数据源
需要注意:
a)如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 DataTable 设置 PrimaryKey 值。您必须自己定义PrimaryKey 以确保正确解析重复行.
b)如果对 DataSet、DataTable 或 DataRow 调用 AcceptChanges,则将使 DataRow 的所有 Original 值都将被重写为该 DataRow 的 Current 值。如果已修改将该行标识为唯一行的字雀模段值,那么当调用 AcceptChanges 后,Original 值将不再匹配数据源中的值。
看看下面例子:
// Assumes connection is a valid SqlConnection.
SqlDataAdapter dataAdpater = new SqlDataAdapter(
"SELECT CategoryID, CategoryName FROM Categories", connection);
dataAdpater.UpdateCommand = new SqlCommand(
"UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID" , connection);
dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryID", SqlDbType.Int);
parameter.SourceColumn = "CategoryID";
parameter.SourceVersion = DataRowVersion.Original;
DataSet dataSet = new DataSet();
dataAdpater.Fill(dataSet, "Categories");
DataRow row = dataSet.Tables["Categories"].Rows[0];
row ["CategoryName"] = "New Category"纳岁陪;
dataAdpater.Update(dataSet, "Categories");
插入、更新和删除的排序
在许多情况下,以何种顺序向数据源发送通过 DataSet 作出的更改是相当重要的。
例如,如果已更新现有行的主键值并且添加了具有新主键值的新行,则务必要在处理插入之前处理更新。
可以使用 DataTable 的 Select 方法来返回仅引用具有特定 RowState 的 DataRow 数组。然后可以将返回的 DataRow 数组传递到 DataAdapter 的 Update 方法来处理已修改的行。通过指定要更新的行的子集,可以控制处理插入、更新和删除的洞蠢顺序。
示例如下:DataTable table = dataSet.Tables["Customers"];
// First process deletes.
adapter.Update(table.Select(null, null, DataViewRowState.Deleted));
// Next process updates.
adapter.Update(table.Select(null, null,
DataViewRowState.ModifiedCurrent));
// Finally, process inserts.
adapter.Update(table.Select(null, null, DataViewRowState.Added));
⑺ java dataset
java dataset是什么,让我们一起了解一下。
DataSet是ADO.NET的中心概念,是内存中的数据库,也是不依赖于数据库的独立数据集合。所谓独立,就是断开数据链路或者关闭数据库,DataSet依然是可用的喊野指。
java生成dataset的两种方式?
1、通过sparksession读取外部文件或者数据生成dataset。
2、通过调用createDataFrame生成Dataset。
java端如何实现DataSet?
1、创建DataSet、DataTable、DataRow、DataColumn、DataColumnCollection和DataRowCollection对象
2、实现DataSet对DataTable的集合操作郑配脊扰和DataTable对DataRow及DataColumn的集合操作。
3、实现数据的查询。
实现要求如下:代码展示
DataSet myset=new DataSet(); DataTable mytb=new DataTable(); mytb.Columns.Add(new Columns("objname",String.class)); mytb.Columns.Add(new Columns("objjc",String.class)); mytb.Rows.Add(new Object[]{"A000001","testtesttest"}); mytb.Rows.Add(new Object[]{"A000001","testtesttest"}); myset.Tables.add(mytb);
另外在java中dataset还有四种基本用法,即添加数据、修改数据、删除数据、恢复数据。
⑻ 关于.net的dataset数据更新机制
数据集(DataSet)是独立于.NET提供程冲液扒序的
如果将数据库比作一个仓库 , 那么DataSet就相当埋睁于一个临时数据库 , 用于存储临时数据,
从而提高数据访问效率 。
DataAdapter是DataSet和数据库的连接桥梁,其Fill()方法就是将数据库中的数据填充到DataSet中,而Update方法则是负责将dataset中修改的数据返回到数据库中。数据库是通过什么来修改相应数据的呢?在我们修改dataset中的数据时,事实上dataset中的数据是没有作任何修改的,dataset只将记录所散昌有行的状态,比如添加的行、删除的行、修改的行、未变化的行等,DataAdpater将这些状态返回到数据库,然后数据库根据记录进行相应修改。这应该就是数据集的更新机制。
说的不是很清楚,希望你能理解!
⑼ 什么是.dataset文件
你说的是typed DataSet和untyped DataSet吧?
typed DataSet是从DataSet派生的,它根据事先定义的Data Schema生成数据集,对数据集中的字段实行简滑强类型约束。你可以通过它产生的cs文件看到许多方法对DataTable的操作进行了封装,这样你就可以通过MyDataSet.MyTable.Field对字段进行访问,而不是像DataSet那样:
MyDataSet.Tables["TableName"]["Field"]; 简化了编程,同时不容易出错,想象一下如果在"Field"中拼错了字段名,那么编译器也不会检查出来,对于typed DataSet就不用了,如果你Field写错的话,那么马上就可以知道。
还有就是如果你在Typed DataSet包含多数据集,同时在XSD中对这些数据集建立关系和约束,那么拦穗腊Type DataSet会生成相应的方法来反映这些关系和约束。如果使用untyped DataSet,你需要自己做。
性能上的考虑:虽然Typed DataSet创建对象实例的时候比unTypede DataSet要多一些开销(时间和空间),但是在填充数据的时候要族皮比untyped DataSet快,这是因为DataAdapter已经知道怎么Fill一个Typed DataSet,相比之下,DataSet需要两次读取数据库,第一次取得数据库中表的结构信息,第二次才fill数据。
Typed DataSet相对于DataSet的缺陷:除了创建的开销之外,Typed DataSet不如DataSet灵活,因为Typed DataSet一旦确定,数据表的结构就固定了,如果需要修改,必须重新生成。
而DataSet你可以随时根据需要进行操作(比如添加字段,删除字段等)。
另外,团IDC网上有许多产品团购,便宜有口碑