最近在忙公司的一个软件的测评,两天都是在陕西软件评测中心过的,好无聊,下午回到公司写了一个计算年龄的函数。哎!赶紧结束吧。发现最近好久没更新技术的东西了,懒惰啊!
[coolcode lang="C#"]
///
/// 年齢の決算
///
///
///
private int Age(string seiymd)
{
int Seiy = Convert.ToInt32(seiymd.Substring(0, 4));//年
int Seim = Convert.ToInt32(seiymd.Substring(5, 2));//月
int Seid = Convert.ToInt32(seiymd.Substring(8, 2));//日 int nowyr = DateTime.Today.Year;//今の年
int nowmh = DateTime.Today.Month;//今の月
int nowd = DateTime.Today.Day;//今の日
int year=nowyr-Seiy;
if (year > 0)
{
if (nowmh – Seim < 0)
{
year–;
return year;
}
if ((nowmh == Seim) && (nowd – Seid < 0))
{
year–;
return year;
}
}
else
{
year = 0;
}
return year;
}
[/coolcode]
ADO.Net是.NET平台里面最吸引人的地方了。最近参加了一个项目,由于客户要求新增一块。类似的模块已经有了,数据验证和导入。但是看过代码之后发现真的很慢,很多地方是用生成SQL语句来完成的。这样效率很低。所以自己决定用ADO.NET来完成这一任务。
我以前对ADO.NET的理解是:通过这个你可以很方便的处理大量的数据,而不用去和数据库大太多的交道,它可以避免经常的对数据库操作。她是把数据库中的数据先放入服务器中,不直接对数据库操作。另外一点就是效率很高。但是如何去实施,自己真的很不了解。
下面是自己经过三天项目后,自己通过MSDN等资料,收获的一些东西
从数据库中利用ADO.NET读取数据放入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.NET还是个很好的东西的。最近在看IBatIs.net可以说是ADO.net的一个扩充。英文资料太费脑子了。郁闷!
接触.NET这段时间来,对.NET还是比较看好的,至少他在很多方面做的的确很好。ADO.NET就是做的最出色的了。方便,快捷。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"]);
}
———————-
这两周自己应该会过的很充实了。努力吧!尽量这周之内把大致的内容完成,然后测试和修改。