当前位置:编程学习 > C#/ASP.NET >>

请大家帮助看下,我的类应该怎样定义

我使用的类,基本上是ADO.NET数据操作。
里面有很多方法,基本上都是获取表信息或者是表中数据信息。
数据连接使用方法:
OpenOledbConnection(string filename)
{
            string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0";
            System.Data.OleDb.OleDbConnection oledbconn = new System.Data.OleDb.OleDbConnection(connstr);
            oledbconn.Open();
            return oledbconn;
        }
然后获取信息使用的方法,如获取库中表名的方法:
public System.Collections.ArrayList GetTablenames(string filename)
        { 
            System.Collections.ArrayList al = new System.Collections.ArrayList();
            System.Data.OleDb.OleDbConnection oledbconn = OpenOledbConnection(filename);
            System.Data.DataTable dtTable = oledbconn.GetSchema("Tables");
            foreach (System.Data.DataRow dr in dtTable.Rows)
            { 
                al.Add(dr["TABLE_NAME"].ToString().Substring(0,dr["TABLE_NAME"].ToString().Length-1));
            }
            oledbconn.Dispose();
            return al;
        }
获取表中记录的方法:
public System.Collections.ArrayList GetStudentname(string filename, string tablename,string columnname)
        {
            System.Collections.ArrayList al = new System.Collections.ArrayList();
            System.Data.OleDb.OleDbConnection oledbconn = OpenOledbConnection(filename);
            System.Data.OleDb.OleDbCommand oledbcmd = new System.Data.OleDb.OleDbCommand("select "+columnname +" from [" + tablename + "] ", oledbconn);
            System.Data.OleDb.OleDbDataReader reader = oledbcmd.ExecuteReader();
            while (reader.Read())
            {
                if (reader[0].ToString() != "")
                {
                    al.Add(reader[0]);
                }
            }
            reader.Close();
            oledbcmd.Dispose();
            oledbconn.Dispose();
            return al;
        }

在上面三个方法中均用到了filename这个参数,当然,将它放到每个方法中是不合适的,之所以这么做,是因为,在我的程序中有多处用到同时要访问两个数据库文件,如果将filename做为一个private string 或者public string 都不合适,示例代码如下:
 foreach (string str in askclass.GetStudentname(desfilename.Text, tableslist.Text + "$", columnslist.Text))
               {
                    askclass.InsertToTable(Application.StartupPath + "\\student.xls", tableslist.Text + "$", "姓名", str);
               }
上面代码段中GetStudentname()和InsertToTable()中的filename为两个不同的数据文件。

请大家帮忙,我的filename应该怎样在类中定义呢?数据连接的方法OpenOledbConnection()是否合适?

谢谢大家。 --------------------编程问答-------------------- 你应该将文件名或者数据库连接字符串定义为一个singleton类。OpenOledbConnection方法的访问级别最好定义为private,以免类外部的调用在打开连接并执行操作后后不关闭连接。 --------------------编程问答-------------------- 上面代码中:InsertToTable(string filename,string tablename,string columnname,string colunmvalue)
GetStudent(string filename,string tablename,string colunmname)
--------------------编程问答-------------------- lijipan,小弟是菜鸟,希望能给予代码指导。 --------------------编程问答-------------------- OpenOledbConnection 是private的
InsertToTable()是public的
GetStudent()是public的

现在不知道filename应该用什么方式定义
singleton类?我怎么没查到,还望给予帮助。 --------------------编程问答-------------------- 我觉得这样也没有什么不妥的地方,如果一定要把参数改为属性,其实也不难,给你点提示。

首先把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); 


--------------------编程问答-------------------- 谢谢。 --------------------编程问答-------------------- 顶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都提供支持。
--------------------编程问答-------------------- mark
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,