liu6’s blog

ADO.NET让数据库操作更加简便

ADO是.NET平台里面最吸引人的地方了。最近参加了一个项目,由于客户要求新增一块。类似的模块已经有了,数据验证和导入。但是看过代码之后发现真的很慢,很多地方是用生成SQL语句来完成的。这样效率很低。所以自己决定用ADO来完成这一任务。

我以前对ADO的理解是:通过这个你可以很方便的处理大量的数据,而不用去和数据库大太多的交道,它可以避免经常的对数据库操作。她是把数据库中的数据先放入服务器中,不直接对数据库操作。另外一点就是效率很高。但是如何去实施,自己真的很不了解。

下面是自己经过三天项目后,自己通过MSDN等资料,收获的一些东西

从数据库中利用ADO读取数据放入DataTable以后,最好给DataTable设置一个主键,这样在以后的调用中就可以使用列名来取某一列了。

            foreach (DataRow dr in Tables["sample"].Rows)
            {
                dr.Columns[0]="";
            }
这样操作一定很不爽,用数字来标识列会让人陷入迷茫中的。特别是列数多的时间。
但是如果给DataTable设置主键了以后,你就可以使用dr.Columns["id"]来访问数据了。
这样会方便许多,而且后期的维护也会简单很多。
ds.Tables["test"].PrimaryKey = new DataColumn[] { ds.Tables["test"].Columns[0] };
这样之后你就可以随心所欲了。
另外就是DataTable中每列的数据类型,在填充数据以后就不可以更改的。所以这点上应该小心一些。
利用DataSet来更新数据库的时间也是很简单的,
SqlCommand cmd = new SqlCommand(SQLStr, conn);
SqlDataAdapter da = new SqlDataAdapter();
da.UpdateCommand = cmd;
da.Update(ds, "old");

一般这样就可以解决问题了,当然了,数据类型一定要一直。至于不一致的时间可以使用cmd.Parameters.Add()来指定。建议最好不管什么操作,都给相应的Command指定一个SqlCommand,以防万一。

还有很多收获,ADO还是个很好的东西的。最近在看IBatIs可以说是ADO的一个扩充。英文资料太费脑子了。郁闷!

工作顺利

周三正式开始的项目,客户增加了需求。这几天把简单的部分完成了。正式的项目和自己以前的练习项目有很大的不同。在细节上需要更多的注意。不管怎么样,学到了不少东西,收获颇多,可能因为参与的人少的原因吧。:)听丁姐的意思,项目后期的维护就靠我俩了。不过估计也不会有太大的问题了。现在最主要的问题是下周把数据库导入这块完成。

说说这段时间的收获吧。

  • 细节决定成败,虽然很多人说过这个,但是这句话在做项目的时间的确很重要,变量的命名,注释的添加,文件结构等等。虽然都是一些简单的东西,但是能够反映出来一个人的态度。
  • 逻辑问题有时间也是很大的问题,某些功能不能够实现往往就是在逻辑上面出了问题。
  • 熟悉自己使用的工具,虽然用了5个多月的VS了,但是对它和公司的那些前辈们比起来真的还是很不熟悉的。需要努力。
  • 编写代码应该像数学建模一样,不一定是最好的技术,只要能够以最简单、高效的方式完成需求就行了。最新的技术不一定适应项目。

和前辈一块工作的压力还是不小的,不过总的来讲还算可以了。在可以承受的范围之内了。

ps:以后会在72pinesbloggerlive spaces同步更新。因为最近一段时间的一个会议,自己用的空间挂了,损失不少数据。以后还是多备份。另外就是夸奖下72pines的服务哈,虽然最近没有更新。但是还是不错的。

Technorati 标签: ,

我喜欢DataSet

接触.NET这段时间来,对.NET还是比较看好的,至少他在很多方面做的的确很好。ADO就是做的最出色的了。方便,快捷。DataSet是ADO的核心了,其实程序本身的速度可能都不错的,但是和数据库扯上关系的时间就复杂了。数据库的打开和链接将会耗费大量的时间和资源,而有了这个一切都变得轻松起来了。

今天上午把下个项目的环境配置了一下,可是下午被丁姐喊去处理上个项目遗留的问题,客户需求变更了。要添加一个模块。让我和何一块在两周之内把这块搞定。中间有一块数据的导入,自己可能要做这个了。自己当时说了一句,我尽量努力吧,丁姐给我来句,这可是正式的项目,别尽量,一定要做出来。我当时那个寒啊!是啊,这应该算是自己做的第一个真正和用户接触的项目了,以前做的那两个都是练习的。现在是真刀真枪的开干了。然后就是坐在那里思考自己应该怎么做了。然后就是大家商量大概应该怎么样完成了。

其实功能的实现倒不是主要的问题,主要是效率。他们已经完成了一个类似的模块,但是在大量数据的导入时间,效率太差了。看代码发现主要是他们把数据先读入到数据库中,觉得这样做肯定很慢。打算用DataSet来做这一块。思路就是把数据库中需要比对的数据读入到DataSet中的一个table中,本地导入的数据也导入到一个table中,提取datarow进行比对。这样应该可以节省下来不少时间的,而且实现起来应该也不错的。

DataSet的使用办法其实很简单,但是其中包含太多太多的东西了。在.NET3.0中添加的LINQ会使DataSet更加强大,可是现在只能够使用2.0。痛苦啊。言归正传,DataSet的一般如使用方法如下。

第1步,创建到数据源的连接:
SQLConnection con =new SQLConnection(”server=localhost;uid=sa;pwd=;database=pubs”);
第2步,创建DataSetCommand对象,指定一个存储过程的名字或者一个SQL语句,指定数据链路;
SQLDataSetCommand cmd =new SQLDataSetCommand(”SELECT * FROM Authors”, con);
第3步,创建一个Dataset对象
DataSet ds = new DataSet();
第4步,调用DataSetCommand的FillData方法,为Dataset填充数据。                  注意:数据链路没有必要是打开的。如果数据链路是关闭状态,FillData函数会打开它,并在FillData之后关闭数据链路。如果数据链路本来就是打开的,在FillData之后,数据链路依然保持打开状态。
int iRowCount = cmd.FillDataSet(ds, “Authors”);
第5步,操作数据。由于FillData返回了记录的个数,我们可以构造一个循环,来操纵Dataset中的数据。
for(int i=0; i< iRowCount; i++){
DataRow dr = ds.Tables[0].Rows[i];
Console.WriteLine(dr["au_lname"]);
}

———————-

这两周自己应该会过的很充实了。努力吧!尽量这周之内把大致的内容完成,然后测试和修改。

开始工作

上个月一直没有项目,所以无聊的很。其实在软件公司里面,没有项目也是一种煎熬的。整天无所事事也是很烦的,虽然用这段时间自己自学了计算机和日语,但是毕竟和工作还是有很大的差别,很多事情还是要在工作中才能够学到的。

今天在公司里面给去上海的同事们装操作系统,忙了一下午,感觉挺累的。还是比较喜欢这样的感觉的。

明天去把项目的环境搭建一下,可能还会参与对上一个项目的修复。哎!客户永远是第一的。改吧。进入项目,加油了!

讨厌Suite

不晓得为什么,微软为什么会喜欢这样的安装方式。给vs加一个补丁,比装一个新的还麻烦。还有那个live套件也是。下了一个Suite之后,选了你要的组件之后还要从网上慢慢下载。的头真的很有问题。

希望在走之前能够装好了。

另外,今天是中秋节。节日快乐了。

The Event Life cycle of ASP.NET 2.0

Technorati 标记: ,

今天看了一个关于asp.net2.0的QA,学到了不少东西。中间有一段是关于asp中的页面声明周期的。很有意思,而且很有用。翻译出来与大家分享。
——————
ASP 2.0中页面事件的生命周期
为了能够跟踪发生在页面的时间,最好打开跟踪(<% @Page Trace=”true”%>),然后就可以跟踪下面的事件了。
PreInit-这个事件是整个asp页面声明周期的开始。如果你需要更改Master page或者是主题的修改,那么这个事件就是你要找得了。动态的一些控制也是在这里完成的。
Init – 每个网页上的控件都是在这里初始化的。
Init Complete* -页面初始化和处理结束。
PreLoad* - 这个事件加载页面完成之前被激活。
Load –这个事件用来对页面和页面所有的空间进行设置。控件的属性,可见性等等。经常的做法是在这里处理一些页面初期的事情。我们经常用到的也就是这个了。这个事件就表明所有的控件都已经完全加载完毕了。
LoadComplete* -这个事件仅仅表明页面生成成功,并放入内存中。同时也是表明了页面事件的开始。
PreRender – 如果你想对页面的控件的内容或者页面做些更新的话,那么就用这个事件了。首先针对页面,然后针对控件。
PreRenderComplete* -这个被调用就说明PreRender已经执行完毕。
SaveStateComplete* - 在这里事件里面,目前所有的空间的状态将被放入ViewState中。(终于找到这个东西了。)
Unload –这个总是用来关闭诸如文件或者数据库链接这类操作,有时也用写一个log,用来记录完成的工作。主要是页面结束时进行的一些操作。
标有*都由asp自动完成了。
—————
还有一个是ViewState 的,再进公司之前有个培训我的老师问过我这个东西。可惜他现在已经不在公司了。
Explain the ViewState in ASP?
http是一个弱状态的协议,因此,控件的状态在两次不同的postback之间不保存。Viewstate用来存储服务器侧的控件状态在两次postback之间。信息存储在HTML中的隐藏区域里面。换句话,是页面控件的快照。
如果页面不需要用到Viewstate,尽量把它禁用了。能够节省不少空间。
Explain the ASP Page Directives? 解释asp page 指令
以上文章的原文出自http://www.dotnetcurry.com/,一个很经典的.net教学网站

Page 5 of 6« First...«23456»

订阅

推荐朋友们利用Feed来关注注本站内容,以更佳体验来得信息:

Services


del.icio.us Gmail/Google Talk Last.fm LinkedIn Picasa Web Albums StumbleUpon Twitter

ADs

Before you go

Going so soon? May these links be a guide to web enlightenment. Schwing!

    Akismet

    Partner links