你应该将文件名或者数据库连接字符串定义为一个singleton类。OpenOledbConnection方法的访问级别最好定义为private,以免类外部的调用在打开连接并执行操作后后不关闭连接。

解决方案 »

  1.   

    上面代码中:InsertToTable(string filename,string tablename,string columnname,string colunmvalue)
    GetStudent(string filename,string tablename,string colunmname)
      

  2.   

    lijipan,小弟是菜鸟,希望能给予代码指导。
      

  3.   

    OpenOledbConnection 是private的
    InsertToTable()是public的
    GetStudent()是public的现在不知道filename应该用什么方式定义
    singleton类?我怎么没查到,还望给予帮助。
      

  4.   

    我觉得这样也没有什么不妥的地方,如果一定要把参数改为属性,其实也不难,给你点提示。首先把filename提升为属性,并且该属性只在构造函数中赋值:public .ctor(string filename)
    {
      this.filename = filename;
    }private string filename
    public string Filename
    {
      get { return this.filename; }
    }然后把原来的方法做适当的改动,例如:
    OpenOledbConnection() 

      string  onnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=" + this.filename   +   ";Extended   Properties=Excel   8.0"; 
      System.Data.OleDb.OleDbConnection oledbconn = new System.Data.OleDb.OleDbConnection(connstr); 
      oledbconn.Open(); 
      return oledbconn; 
    } 最后,也是最重要的一点,就是在外部调用时要声明两个对象的实例,分别对应不同的文件,如下:
    AskClass askclass1 = new AskClass(desfilename.Text);
    AskClass askclass2 = new AskClass(System.IO.Path.Combine(Application.StartupPath, "student.xls"));
    string tableName = tableslist.Text + "$";foreach   (string   str   in   askclass1.GetStudentname(tableslist.Text   +   "$",   columnslist.Text)) 

      askclass2.InsertToTable(tableName,   "姓名",   str); 
      

  5.   

    顶1楼的。string   connstr   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +   filename   +   ";Extended   Properties=Excel   8.0"; 
    放在open里不是很好。如果lz你有时间,最好使用IConnection, IDataAdaptar等接口来写一个读写数据库的基类。(最好还支持stored producure。)
    这样对oledb、sqldb、oracle都提供支持。