C++程序员学习用C#写网站(三)

来源:互联网 发布:软件cmmi 编辑:程序博客网 时间:2024/05/11 12:41


第6天、
        前一天写了好多属性,set,get;编译一下报错误,后来检查出来 private int iproperty;这一句后面多了一个分号。继续写登陆,我的想法是,写一个数据库操作类,名字叫SQLServerOperator,里面写个通用方法,名字叫ExecuteReader,传进去一个查询语句字符串,返回一个SqlDataReader,然后不同的调用者使用自己的方式把SqlDataReader转换为业务对象,ExecuteReader也是静态方法;我的Login是User类的一个静态方法,他构造查询语句,调用SQLServerOperator.ExecuteReader,获得一个SqlDataReader,然后Read()一下,把里面的数据读出来,付给一个new出来的User对象。
     

        哼哧哼哧费了九牛二虎之力代码写完,编译通过,满心欢喜F5,输入账号和密码,点击“登录”......,页面上显示错误,说什么SqlDataReader.Read()抛出异常,这下子心里面哇凉哇凉的......,经过一番折腾,明白了我的错误在哪里,我在SQLServerOperator.ExecuteReader里面把connection关掉了,然后把SqlDataReader返回,然后在调Read方法,就会报这个错;换句话说SqlDataReader不能在connection.Close之后Read......,C#程序员看到,一定会笑话我这个低级错误吧!!!尴尬看看老项目里面代码怎么写的,用了一个委托(C++里面的函数指针),SQLServerOperator.ExecuteReader接收一个函数,获得SqlDataReader之后调用这个函数,这个函数根据不同的需要把SqlDataReder中的数据转成诸如User这样的对象。改吧,嘛咪嘛咪轰,改好了。跑一下,成功哩,Yeah、Yeah、Yeah、Yeah、Yeah吐舌头......


        中间还有一个小插曲,我刚开始写的SqlConnection和SqlCommand对象,我用完之后,不仅调用Close方法,还调用Dispose方法,后来我看网上的代码,还有旧项目的代码,没人主动去调用Dispose,再想到C#有内存回收机制......,虽然没有仔细研究过,本着入乡随俗的心态,我也不主动调用Dispose了。

0 0
原创粉丝点击