近一个月来,我在慢慢地摸索着写自己的第一个C#程序。
我想做一个天气预报打印程序,从ACCEESS中提取上一次的预报文本,然后进行修改,再打印,保存。
一直到现在还没有写好,在这个过程中,我感觉到了自己代码很笨拙,因此我提了下面一些问题,可能太简单,但是还请大家详细一点地给我指点。1、我不知道应当在哪里处理我的数据库连接、操作代码,我现在的做法是在Form_load里定义connection,打开数据库,提取记录,然后关闭。当按下保存里,又重新定义connection,打开数据库,保存数据。 我自己也觉得太笨了,那么,一个良好的实现应当是怎么样的?(希望有代码示例)2、我以前写过VFP的程序,我习惯于把所有东西存在数据库里,比如工作人员的代号和姓名,并在程序运行时全读到内存里。在C#中,我是不是也应当把这些依次读到DataSet里?这样做是一个高效的作法吗?(在我这个程序里,我为自己要用很多个select读表而心烦,因为类似的东西不少)3、在发布预报时,要面向十几个乡镇,每个乡镇都需要乡镇名,天气,最低气温,最高气温。因此,现已我已经在页面上拖放了4*12=48个textbox!在代码处理时,我只能一个个处理,不管是初始化、保存、打印就像这样:
this.textTownName1.Text="aa";
this.textTownName2.Text="BB";
...
...
...
我想大家写程序时不可能像我这样吧?那么应当如何处理这种情况?

解决方案 »

  1.   

    我使用的是VS 2003 .Net1.1 我的程序是WinForm的
      

  2.   

    1.可以把数据库连接字符串封装到类。具体可以看Petshop的源代码
    2。数据量不是很大时,可以全部读到内存中。数据量很大时不是一个好注意,建议使用存储过程分页来实现。
    3方法如下
    string Temp="";
    for(int i=1;i<49;i++)
    {
    TextBox Tb=Page.FindControl("textTownName"+i+"");
    Temp+=Tb+",";
    }
    这样就把所有的textbox
    然后怎么操作就不用我说了吧
      

  3.   

    string Temp="";
    for(int i=1;i<49;i++)
    {
    TextBox Tb=Page.FindControl("textTownName"+i+"");
    Temp+=Tb.Text.Trim()+",";//上个贴,这句写错了
    }
    //这样就把所有的textbox的值都存到一个字符串中了

    //t然后怎么操作就不用我说了吧
      

  4.   

    今天真TMD龌龊 ,写错了两次了,
    TextBox Tb=Page.FindControl("textTownName"+i+"") as TextBox;
      

  5.   

    1在要用的时候才打开,用完马上关闭是对的,因为在.net中打开关闭连接的代价远远低于ADO中,所以多次打开是划算的,更节约宝贵的数据库资源.不过多次打开关闭操作用代码copy多次就不是好主意了,应该提取出来写成方法或类.(PS:刚才在我的机器上106秒钟,可以打开数据库连接再关闭1000万次,平均1秒约10万次,所以代价是非常小的)2没有通用的尺度,具体问题具体分析.3可以给这些控件一个父容器,然后用循环来遍历.
    也可以用反射,但是不推荐.
      

  6.   

    1.你可以建立一个Connection类型的类实例变量,在load事件中进行设置并进行连接读取数据,然后执行Connection.Close(),将连接关闭;后面再次使用时,只需要执行一下Connection.Open()即可完成连接。
    对于如何能够简体对SQL或数据的处理,你可以学习一下Petshop,对你的数据连接层进行封装,封装到什么程度就看你的个人水平;
    2.DataSet就是一个程序中的变量集,如果数据量少,这样作当然是个不错的主意,但是当数据量大的时候你就要考虑清楚了,这个时候最好的办法可能就要用到一种所提的对数据连接层进行封装的方法了。
    3.如果这些TextBox初始化的内容具有一定的规则可寻的话,你可以考虑用窗口的Controls集合加上循环来实现,或才可以参考楼上的。
      

  7.   

    谢谢各位,虽然回答不能令我完全满意,比如:WinForm 在.net1.1 下没有findcontrol