public void RoomType_Bind(System.Windows.Forms.ComboBox combo)
{
// 将房间类型绑定到combo控件
string strSelec = "select [RoomTypeName] from [RoomType]";
SqlDataReader sdrRoomType = DBManager.ExecAndGetSdr(strSelec);//1 combo.Items.Clear();//2
while (sdrRoomType.Read())//3
{
combo.Items.Add(sdrRoomType["RoomTypeName"]);//4
}
sdrRoomType.Close();//5
{
// 将房间类型绑定到combo控件
string strSelec = "select [RoomTypeName] from [RoomType]";
SqlDataReader sdrRoomType = DBManager.ExecAndGetSdr(strSelec);//1 combo.Items.Clear();//2
while (sdrRoomType.Read())//3
{
combo.Items.Add(sdrRoomType["RoomTypeName"]);//4
}
sdrRoomType.Close();//5
}
在这里的函数名,变量名都是用的我项目里面的名字,为了节约时间,就懒得去想另外的名字了。今后都如此。
DBManager在“我的代码库”里有定义,这个类可能对我非常重要,只要做与数据库有关的项目,我想我都一定带上它的,它是我的好帮手。
//2这一行代码的作用是清除当前cmb控件的栏目,如果没有这一行,大家会看到cmb控件里会有一个空栏目
//3这一行是这个算法最实质的操作,向cmb控件添加栏目,每次添加一条。sdrRoomType最开始(刚创建这个对象时)可以把它理解成一个表,sdrRoomType.read()就是读取这个表中的下一条纪录(第一次调用时是读取第一条纪录),那么这时sdrRoomType就代表的是下一条纪录了,代表的是一条纪录,不是一个表,这是sqldatareader对象最难理解的地方了。//4这一行对我这个观点进行了证实,它表示添加sdrRoomType所代表的当前行的RoomTypeName字段的值。
//4这一行也可以改为 combo.Items.Add(sdrRoomType.GetString(0));用序号获取所要的字段。
如果知道一列的名称而不知道其所在的位置,可以通过调用DataReader 对象的GetOrdinal()方法解决,此方法接收一个列名并返回此列名所在的列号
如:int id = sdrRoomType.GetOrdinal("RoomTypeName");
//5 DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)
DataReader的特性 ADO.NET DataReader对象可以从数据库中检索 只读、只进 的数据流。因为每次在内存中的数据只有一行,所以使用DataReader可提高应用程序的性能并减少系统开销。它还提供了未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,DataReader是一种合适的选择。
第一次写教程性质的东西,有感触啊。要真正写好一个教程是非常不容易的。当然如果能写好一点,其实受益最大的是自己,因为你必须花时间,动脑筋去琢磨,在这个过程中,你对一些概念,结论的理解会上一个层次,在脑中留下的印象会更深刻。
我现在没有多少时间来写教程了,如果有时间一定多写一点。
我还觉得,学习的一个非常好的方式,就是试着去教别人。特别是对一些概念,原理的东西,通过反复的讲,你的理解一定会非常深刻的,一定会有所体会的。这正所谓是教学相长。我又联想起新东方学校的老师,他们的水平真是让人佩服,一方面肯定要归功于他们的刻苦勤奋,另一方面我想他们应该好好感谢他的学员。如果没有他们自己的反复的去讲授(没有学生的话,谁讲得起来啊),他们对知识理解深度,对知识的掌握的熟练度一定没有现在这么好了。我自己也有深刻的体会,现在我对高中数学的了解比教书之前要深多少倍呢,我敢保证,如果现在我去参加高考数学考试,成绩一定不会低于140(哈哈,又不谦虚了)。
本文转自 参天树 51CTO博客,原文链接:http://blog.51cto.com/119244/51073,如需转载请自行联系原作者