ADO.NET和.NET框架中的数据管理

转自微软社区

主持人和专家介绍
主持人:Guest_fanfan
微软专家:郑子颖(Guest_Eric[MS]),黄雪斌(Guest_steven_ms)

host Guest_fanfan says: 欢迎大家参加微软在线技术聊天。
Host Guest_fanfan says: 今天的聊天主题是:ADO.NET和Data Managment in .NET Framework
Host Guest_fanfan says: 聊天的时间是:下午4:00-5:00
Host Guest_fanfan says: 首先,让我们欢迎来自微软全球技术中心的微软专家:
Host Guest_fanfan says: 郑子颖
Host Guest_Eric[MS] says: 大家好
Host Guest_fanfan says: 黄雪斌
Host Guest_steven_ms says: 各位好,欢迎大家!

来宾提问 Q 和专家解答 A
[Q]yanhao : 只能对于单个表建立DataView吗?不能对多个DataTable建立一个DataView么?
[A]不可以。DataView实际上是针对一个DataTable进行筛选、排序;您可以使用JOIN语句将多个表的内容显示在一个DataGrid中。
[Q] javanow: 我想对一个DataTable的数据进行排下序。
[A] 可以的,DataTable的排序一般就通过DataView来做,可以设定sort方式,也能设定filter。
[Q] 如果数据集中有上万条记录,用DataView的效率如何??
[A] 如果数据量很大,比如几万条,建议用DataReader而不是DataSet,否则离线数据量太大,很耗内存。
[Q] Gentleman : 请问当结果的数据集很大时(上万条记录时),在DataSet里怎样提高效率?
[A] 用DataSet处理上万条记录的时候,尽量选择少一点的列(Column),尽量不要把text类型或者blob之类的放在DataSet中。
[Q] zb : ado.NET能不能连接oracle数据库。
[A] 可以,可以用OleDbProvider。
[Q]yanhao : 使用JOIN语句将多个表的内容显示在一个DataGrid中?实际怎么操作?
[A]举个例子:
string strSQL = "Select * from [Customers] INNER JOIN [Orders]

ON [Customers].CustomerID = [Orders].CustomerID";

this.dataAdapterMaster = new SqlDataAdapter(strSQL, connection);

this.dataAdapterMaster.Fill(this.dataSet);

datagrid1.DataSource = this.dataSet;

这样就可以将多个表Join到一个DataGrid中。
[Q] ayou : 我现在已经开始喜欢ado.NET连接数据库的方式了,因为本来就比较喜欢ado,但多了datesets就感觉是多了点什么,当然,离线的思想对于解放服务器很不错,但会给编写者带来一些麻烦!怎么看待!
[A] ADO.NET中的DataReader仍然采用和RecordSet类似的做法。而DataSet采用完全不同的新思路,DataSet里面包含数据的schema、数据的内容、数据的关系等等,都是离线的,能够减轻数据库服务器的负担,减少连接建立次数。
[Q] allanyan : 请问怎么做才能使DataAdapter在需要的时候自己去创建相应的Command?
[A] DataAdapter能够自动创建InsertCommand、DeleteCommand等。
[Q]javanow : ds.Tables[0].DefaultView.Sort ="Sort asc"; DataTable dt = (DataTable)ds.Tables[0].DefaultView.Table;不能排序。
[A]在指定DataView的排序后,您需要重新绑定数据源。
[Q] mmkk : 如果一个应用程序已经在使用了,但是由于改动需要覆盖bin中的.dll,那么此时客户使用的Session会不会消失?
[A] 会的,Assembly更新以后ASP.NET会重新启动,Session会丢失。
[Q] yanhao : 我是采用XML数据填入DataSet方式,然后再加载到DataGrid里面的,这样怎么操作?
[A] 可以用DataSet.ReadXML读入一个XML文件,接下去填入DataGrid就没什么两样了。
[Q]ayou : datasets把所有的数据需要放在内存中吗?岂不是对内存的占用是一种浪费!
[A]您不需要将数据库中所有的数据都读到DataSet中,可以Select自己需要的数据。
[Q] snoic : 用commandbuild对象现在可以直接完成在服务器端删除以在datatable中以删除的记录的吗?
[A] 可以的,DataSet.Update()能够自动完成的。
[Q] javanow : 我是直接用for ( int i=0;i< dt.Rows.Count - 1;i++)遍历DataTable的每一行,是不是没法用sort?
[A]您最好根据DataTable先生成一个DataView,然后指定DataGrid的数据源为该DataView,之后就可以在DataView中指定排序。
[Q] aQiang : 请问怎样连接到foxpro的.dbf数据表,谢谢!
[A] 写好connection string然后就可以用OleDbConnection就可以连上了。
[Q]xiaohei : 能不能列出一些在什么条件下使用dataset的例子。
[A]当有多个DataTable时,使用DataSet非常方便。
[Q] allanyan : 请问,怎么做才能让DataAdapter在需要的时候自动的创建相应的Command????
[A] 数据库里面的表应该有primary key。
[Q]ayou : vs.NET中提供的OleDbConnection和SqlConnection和ado.NET有关系吗?
[A]有关系,ado.NET建立数据库连接时要用到。
[Q] CForce : 请问直接用xml做数据库跟用Access做数据库,效率的比较?
[A] Access数据库效率比较高。毕竟Access是关系型数据库。已经有一些第三方的纯XML数据库了,您可以参考以下。
[Q]snoic : datagrid能不能给某行或某列设定特殊颜色和字体?
[A]您需要继承DataGridTextBoxColumn并根据您自己的条件重载Paint方法。
[Q]blues_song : 哪有.NET开发的应用程序的演示或例子。
[A]VS.NET自带一个Duawish的例子,值得一看。
[Q]ayou : 必须要在vs.NET的设计视图中进行设置OleDbConnection和SqlConnection吗?能不能只用代码就做到。这和我直接写ado.NET的语句连接数据库有何不同!
[A]可以。
[Q]letian : 请问datagrid动态生成的列,如何取得datagird表头名呢。
[A]建议您使用DataGridTableStyle,可以对每一列进行控制。
[Q] allanyan : 请问,DataSet中的DataSet Primary Key和数据库中的Primary Key有什么联系吗?
[A] 不完全一样。但是如果要往DataSet中fill数据,或者要DataSet.Update(),这两个Primary Key就要一致。
[Q] wuwei : 请问ASP.NET写的Web App能否分发到 NT4.0 + IIS4上。
[A] 不可以。
[Q] aspx : DataSet的生存期是多久,是不是每次页面post时都要重新往DataSet中填充数据再进行操作。
[A] 是的,除非把DataSet放在Session里面,否则DataSet不会在服务器段保存。
[Q]china_boy : datagrid 可以任意调整每一列的间距吗,怎么调整???
[A]建议您使用DataGridTableStyle,可以对每一列进行控制,具体做法可以查一下MSDN。
[Q] janesnow : [Q]能不能将多表数据查询结果保存到一个DataTable(不是DataSet)中,并且排除同名字段?
[A] 可以的,可以从数据库里面把多个表的数据join查询并放到一个datatable里面。
[Q] jielei : asp.NET 可以开发DB2,或 ORACLE 9I 么?
[A] 可以的,可以通过OleDbProvider连接各种数据库,当然前提是这些数据库支持.NET。
[Q] rivergq : ADO的某连接长时间使用,会暴吃内存的问题解决了没有?
[A] 在ADO.NET中,查询完数据以后就应该释放connection,不用担心会增加服务器负担,因为ADO.NET会做connection pool。
[Q]javanow : DataGrid排序控制:
[A]以下是一个例子:
DataView dv = new DataView(this.datatable);

dv.sort = "xxx";

dataGrid.DataSource = dv;

javanow可以试一下。
[Q] china_boy : 我始终不能解决将简体数据库的内容转成繁体显示,有这方面的提示吗。
[A] 繁体简体转换可以在客户端通过编程来做,参见http://www.csdn.NET/expert/topic/836/836558.xml。
[Q] ldz : ADO。NET号称平台兼容性和可升级的数据接口是指什么?
[A] OleDbProvider可以back on多种数据库,而且可以根据数据库服务器的改变进行升级,但总是能保证借口不变。
[Q] ff : dataset中如何得到表间的关系及字段的约束关系。
[A] DataSet.Relations。
[Q]LYY : 我想学好ASP.NET须要什么相关的知识,能推荐些好书吗?
[A]ASP.NET高级编程[清华大学出版社] 。
[Q] china_boy : datagrid 可以任意调整每一列的间距吗,怎么调整???
[A] 可以的,但是WebForm里面的和WinForm里面的做法各有不同。
[Q] jjmm : 在应用程序中使用一个连接好,还是每次对数据库的操作都新建连接,并且每次都关闭。
[A] 每次都新建比较好。不用担心这样会导致连接过多或者频繁连接,因为ADO.NET提供connection pool。
[Q]seven : 我想学好ASP.NET须要什么相关的知识,能推荐些好书吗?
[A]您可以学一下微软PetShop以及IBuySpy的Sample,会对你有很大帮助。
[Q] ff : dataset如何在com中传递???????
[A] 可以的,至少DataSet是可以Serializable的,就可以跨进程、跨机器传递。
[Q] maorachow : VC++.NET如何用ADO访问SQL server 我的做法是用COM interface CADORecordBinding 现在用什么最好,我的方法不能加减记录?
[A], you can use the managed extension in VC++.NET to leverage ADO.NET。
[Q]ldz : 问一个很重要的问题C#将来可能在不是Windows平台上运行吗?那ADO。NET是否也可以??
[A]没有问题。只要.NET Framework可以运行就行。
[Q] w_z_y : 翻页时,将数据库中的数据都放到dataset中,然后绑定这不是很浪费内存吗?有什么其它的好办法吗?
[A] 如果数据过多,可以在stored procedure里面就做分页。
[q] Dance1969 : 请问Dateset中的表保存到一个文件吗?象在老的ADO的Recordset中就有Save的方法?谢谢。
[a] Yes。
[Q]ldz : 在线程中使用ADO.NET的时候,是否每个线程都需要建立连接、能工用连接吗?
[A]可以,您可以建立共有的连接。
[q] 能不能说说怎么在stored procedure中分页,呵呵!
[A] SP 中的分页和 ADO.NET没有关系。ADO.NET 是一种处理数据的方法。
[Q}icerain : vs写的web service返回的DataSet其他的程序如何访问?如用C++BUILDER?
[a]这个问题问得好.其实,只要C++ Builder 能够知道怎么处理XML就行了。譬如,SOAp TOOLKIT。
[Q]snoic : where can download petshop?
[A]http://www.gotdotNET.com/team/compare/petshop.aspx。
[Q]aQiang : 请问连接到foxpro 的 .dbf文件时,ConnectionString中的DSN怎样用程序实现?
[A]你要怎么样的CONNECTIONSTRING?CONNECTIONSTRING 就是一个字符串。
[Q] seahorse : .NET的核心技术就是xml,您觉得对么?
[A]不全对..NET 基于XML。
[Q] w_z_y : sql server和appserver分别和分别在两台机器上,连接数据时appserver必须为sql server建一个别名吗?
[A] 是的,connection string 里面的机器名不能用localhost,应该用sqlserver的机器名。
[Q]mouse : NET 框架何时被移植到 Linux 平台。
[A]HTTP://WWW.GO-MONO.ORG。
[Q]:Dance1969 : 从一个文件中(用SAVE保存的)取回的记录集,如何通过DATASET回放入SQL SERVER。
[A]:使用dataset.update()。
[Q]icerain : 但是,C++BUILDER知道如何处理XML,但是,web service返回的DataSet也是XML吗?
[A]ADO.NET passes XML as the underlying media。
[Q] Dance1969 : 请问Dateset中的表保存到一个文件吗?象在老的ADO的Recordset中就有Save的方法?谢谢。
[A] 用DataSet.WriteXML().NET is based on XML and ADO.NET deals with XML substantially。
[Q]ghj1976 : icyer : 如果需要一个不断线的连接,用ADO.NET还合适吗?比如股票系统。
[A]NO,ADO.NET is disconnected model。
[Q] xiaohei : 能不能说说怎么在stored procedure中分页,呵呵!
[A] 最简单的做法,可以给stored procedure传递两个参数,一个是page index,一个是page size,然后在里面用游标选取纪录。
[Q] letian : XML的如何实现筛选数据呢?谢谢。
[A] 有很多方法,可以读到DataSet里面用DataView做,也可以用XQuery做,当然,XPath也可以完成类似的功能。
[Q] seven : 请教: 我安装了.NET框架SDK后,却不能运行*.ASPX的程序,为何?(IIS已装)。
[A] 还需要运行一个叫asp_regiis的文件,注册一下。
[Q] icerain : vs写的web service返回的DataSet其他的程序如何访问?如用C++BUILDER?
[A] 不能做,或者说非常复杂。因为异种语言之间共享对象需要复杂的接口定义。你可以把DataSet导成XML再传递,这样数据仍然都保存着。
[Q]icyer : Win98中是不是不能运行ASP.NET? WNT呢?
[A]不能。NT需要SP6。
[Q] Dance1969 : 从一个文件中(用SAVE保存的)取回的记录集,如何通过DATASET回放入SQL SERVER。
[A] 仍然可以用DataAdapter存回数据库,但必须保证数据库的表结构和DataSet里面的结构和关系都一样。
[Q] mouse : .NET 框架何时被移植到 Linux 平台。
[A] Linux上面有一个叫mono的项目,您不妨关心一下。
[Q]maorachow : 我想用VC++.NET访问sybase,想通过ADO,但是如果我用了托管VC++,可能我就不能访问实时库接口了,请告诉我怎样在VC++.NET中访问ADO。
[A]Interop technology that enables you use managed code from unmanaged world and vice versa. please look for some Interop sample in MSDN。
[Q]Jeffrey : 在DataView中﹐為什么Find方法一定要對key才能查詢﹐能不能find多個不包括 key的字段呢﹖
[A]不可以。必须要有PrimaryKey.
[Q] javanow : 我有次将sqlCommand 及 SqlConnection都dispose()以后,还能使用SqlCommand对象,这是为什么呢?好像dispose()没有被理会?
[A] 这个和Garbage collection有关,您可以把您的代码和问题放在CSDN上文。有可能您的IDispose()借口实现得不好,以至对象没有立即被销毁,仍然要等.NET来定时销毁,这样就可能出现你的问题。
[Q] Dance1969 : 我能否在DELPHI 6 中使用ADO.NET。
[A] 您可以查找一下关于Delphi.NET的资料,应该也是可以的。
[Q]Lanyuai : where can I find the .NET online support?
[A]您可以到CSDN,天极,以及我们的newsgroup:msnews.microsoft.com。
[Q] aQiang : 请问:"DSN=Visual FoxPro Tables;UID=;PWD=;SourceDB=c:\Documents and Settings\Administrator\My Documents;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=no;"中的dsn如何用程序实现?
[A] 您有没有试过直接用上面这个字符串去创建OleDbConnection对象?应该是可以的,然后就可以照常读取数据了。
[Q]這個privateKey是否可以在table中自己制定﹐這樣在更新數據庫的時候會不會出問題。
[A]笔误,应该是PrimaryKey。可以自己在DataTable中设定。
[Q]letian :  newsgroup网址呢?
[A]msnews.microsoft.com。
[Q] ayou : 在ado.NET语句中怎对sql server数据表施加独占锁。
[A] 如果在ADO.NET中用了BeginTransaction,Sql Server在处理transaction时会自动枷锁的。或者您也可以在t-sql里面实现。
[Q]zhuho : 现在ASP.NET在国外的应用究竟怎么样??
[A]很多。您可以看一下IBuySpy。
[Q] ffff : 怎么把ASP代码转为ASPX代码。
[A] 这个问题很大,不是一句两句能说清的。大部分情况下,ASP代码可以直接在ASP.NET上运行。您可以参考MSDN里面的"Migrating to ASP .NET: Key Considerations"。
[Q]ayou : 在ado.NET中如何使用存储过程?
[A]在SQLAdapter中的SQLCommand设置类型为存储过程。
[Q]ayou : 在ado.NET中如何使用存储过程?
[A]您的问题太大了,可以到MSDN中找找例子。
[Q]zhuho : 您能推荐一本C#的好书吗??
[A]Essencial C#。
[Q] 对于返回结果集的存储过程ado.NET中如何执行这个存储过程,并把这个数据集取出?
[A] Command的Parameter可以设置不同类型,比如In,Output,还有Result。这样就可以把stored procedure里面的返回结果拿过来了。
[Q] ffff : 开发ASP.NET 微软提供什么更好的软件。
[A] 目前仍然是Visual Studio.NET。
[q] ayou : 在ado.NET中如何使用存储过程?给一个具体实例地址可以吗?
[A]updateCommand.CommandType = CommandType.StoredProcedure;
[Q]ayou : 在ado.NET中如何使用存储过程?给一个地址可以吗?在ado.NET中如何使用存储过程?
[A]http://www.csdn.NET/expert/topic/865/865738.xml?temp=.6926081,csdn中的例子。
[Q] NETsnail : 能否让SelectCommand动态根据COMMANDTEXT生成PARAMETERS。
[A] 当command text是select语句或者stored procedure 名字,Parameter需要手工添加。

结束语
Host Guest_fanfan says:
谢谢您参加此次微软专家技术聊天。我们的聊天时间是下午4:00~5:00.欢迎下周四同一时间(下午4:00~5:00)参加微软专家在线聊天:定制个性化的Windows控件.
Host Guest_fanfan says:
如果您有任何问题,请参加我们的新闻组进行进一步的讨论,我们的新闻组有以下6个:
public.microsoft.cn.dotNET.framework
public.microsoft.cn.dotNET.mobility
public.microsoft.cn.dotNET.embedded
public.microsoft.cn.dotNET.languages.csharp
public.microsoft.cn.dotNET.languages.vb
public.microsoft.cn.dotNET.languages.vc
Host Guest_fanfan says:
微软的新闻组服务器是:msnews.microsoft.com。

你可能感兴趣的:(.net)