下面是我获取的数据库里面的数据,请问是不是每次都要连接数据库和实例化对象啊?
这样不是很麻烦么?     
 
      SqlConnection my = new SqlConnection("server=PC-200908111438;database=Northwind;pwd=ok;uid=sa");
            my.Open();
            SqlCommand me = new SqlCommand();
            me.Connection = my;                
            me.CommandText = "SELECT * FROM Employees ORDER BY EmployeeId";
            SqlDataReader mi = me.ExecuteReader();
            label1.Text = mi.GetName(0);
            label2.Text = mi.GetName(1);
            label3.Text = mi.GetName(2);
            label4.Text = mi.GetName(3);
            label5.Text = mi.GetName(4);
            while (mi.Read())
            {
                textBox1.Text = textBox1.Text + mi.GetValue(0).ToString() + "\r\n";
                textBox2.Text = textBox2.Text + mi.GetValue(1).ToString() + "\r\n";
                textBox3.Text = textBox3.Text + mi.GetValue(2).ToString() + "\r\n";
                textBox4.Text = textBox4.Text + mi.GetValue(3).ToString() + "\r\n";
                textBox5.Text = textBox5.Text + mi.GetValue(4).ToString() + "\r\n";            }
            my.Close();
            //8. 将2008-1-1前入学的学生名字显示在ListBox控件中
              //  (显示其名字和入学日期及所在班级)            SqlConnection my1 = new SqlConnection("server=PC-200908111438;database=Northwind;pwd=ok;uid=sa");
            my1.Open();
            SqlCommand me1 = new SqlCommand();
            me1.Connection = my1;
            me1.CommandText = "SELECT top 5* FROM Employees ORDER BY EmployeeId";
            SqlDataReader mi1 = me1.ExecuteReader();
            while (mi1.Read())
            {
                textBox1.Text = textBox1.Text + "\r\n" + mi1.GetValue(0).ToString() + "\r\n";
                textBox2.Text = textBox2.Text + "\r\n" + mi1.GetValue(1).ToString() + "\r\n";
                textBox3.Text = textBox3.Text + "\r\n" + mi1.GetValue(2).ToString() + "\r\n";
                textBox4.Text = textBox4.Text + "\r\n" + mi1.GetValue(3).ToString() + "\r\n";
                textBox5.Text = textBox5.Text + "\r\n" + mi1.GetValue(4).ToString() + "\r\n";            }
           
            my1.Close();

解决方案 »

  1.   

    是,每次都需要打开数据库,然后读数据。
    所以如果建议使用DateSet
      

  2.   

    你这个问题的意思就是代码重用的问题
    比如这个地方要访问数据库,就new一个连接出来,完成后关闭.另一个地方也要访问数据库,就又要new一个出来,用完也关闭,很不好
    最简单的是在一个类中声明一个全局性变量存放一个已经new好的连接,其他地方要用只管拿就行了,不用在多个函数里都去new了但是,随意程序的复杂和功能的扩展,发现其它类也要这样New连接来使用,总不能每个类都New一个同样的连接使用吧,那样重复代码太多了,很杂很烦琐,于是我们又设计一个专门的数据库访问类(一般是静态类),其它类要访问数据库,只要引用这个数据库访问类的函数就行了,我们不用到处New数据库连接了但是问题又来了,我现在使用的是Access数据库,过段时间要改成SqlServer,还有可能换成MySql,怎么办?
    ...
      

  3.   

    楼主还是不要用datareader了,改用非连接模式,用dataAdapter和dataSet就好.
      

  4.   

    今天刚学上面两个,还没学dataAdapter和dataSet所以不知道呵呵!
    纯属疑惑 呵呵!
      

  5.   

    如果Employees表很大,推荐使用上述写法。在连接字符串里配置连接池。用try...catch...finally确保数据库连接关闭。DataSet在记录很多时会内存溢出。
      

  6.   

    reader 比 table 性能好点, 不过数据量不大的前提下 无所谓。 把上面 连接数据库部分的操作 单独放到一个 方法中   你传入参数 sql 语句
    他就会 连接数据库并调用 sql 语句 然后返回 你需要的 reader 或者 datatable  这个你自己定义以后你可以再把 连接操作 和 具体逻辑 , 页面操作 再次分开到不同的地方。。 
      

  7.   

    可以用断开连接
    dataAdapter和dataSet