none
如何動態的設定變數 RRS feed

  • 問題

  •  請教一下各位大大

    我有個table有六個欄位
    我想要用下面這樣的方式取得欄位相關屬性
    Class1 c1 = new Class1();
    DataTable dt = new DataTable();
    dt = c1.rsm("select * from userdata");
     
    MessageBox.Show(c1.col1); //取得第一個欄位值
    萬一我的table欄位有100個 我該如何改寫下面這個class

    class Class1
        {       
            public string col1="";
            public string col2="";
            public string col3="";
            public string col4="";
            public string col5="";
            public string col6="";
            public DataTable rsm(string strsql)
             {
                DataTable smdt = new DataTable();
                string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb;User Id=admin;Password=;";
                OleDbConnection objconn = new OleDbConnection(strconn);
                objconn.Open();
                OleDbCommand objcmd = new OleDbCommand(strsql, objconn);
                OleDbDataReader dr = objcmd.ExecuteReader();
                smdt = dr.GetSchemaTable();
                dr.Close();
                objconn.Close();
                col1 = smdt.Rows[0][0].ToString();
                col2 = smdt.Rows[1][0].ToString();
                col3 = smdt.Rows[2][0].ToString();
                col4 = smdt.Rows[3][0].ToString();
                col5 = smdt.Rows[4][0].ToString();
                col6 = smdt.Rows[5][0].ToString();
                return smdt;
            }
               public DataSet rds(string strsql)
            {
                DataSet returnds = new DataSet();
                string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb;User Id=admin;Password=;";
                OleDbConnection objconn = new OleDbConnection(strconn);
                OleDbDataAdapter objadt = new OleDbDataAdapter(strsql, objconn);
                objadt.Fill(returnds);
                return returnds;
            }

        }

    2009年2月24日 上午 07:29

解答

  • 將你的固定宣告的改用集合型態即可
    譬如

    class Class1  
    {  
    private List<string> _cols = new List<string>();  
    public List<string> Cols  
    {  
    get { return this._cols; }  
    }  
     
    ...  
    }  
     
    程式就可以用  
    Class1 c1 = new Class1();  
    string col1 = c1.Cols[0];  
    string col2 = c1.Cols[1]; 

    如果是.Net Framework 1.0可以將泛型集合List改用ArrayList取代.

    2009年2月25日 上午 12:10

所有回覆

  • 將你的固定宣告的改用集合型態即可
    譬如

    class Class1  
    {  
    private List<string> _cols = new List<string>();  
    public List<string> Cols  
    {  
    get { return this._cols; }  
    }  
     
    ...  
    }  
     
    程式就可以用  
    Class1 c1 = new Class1();  
    string col1 = c1.Cols[0];  
    string col2 = c1.Cols[1]; 

    如果是.Net Framework 1.0可以將泛型集合List改用ArrayList取代.

    2009年2月25日 上午 12:10
  •  感謝大大 使用arraylist就可以用了

     class Class2
        {
            public ArrayList ar = new ArrayList();
            public DataTable rsm(string strsql)
             {
                DataTable smdt = new DataTable();
                string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb;User Id=admin;Password=;";
                OleDbConnection objconn = new OleDbConnection(strconn);
                objconn.Open();
                OleDbCommand objcmd = new OleDbCommand(strsql, objconn);
                OleDbDataReader dr = objcmd.ExecuteReader();
                smdt = dr.GetSchemaTable();
                dr.Close();
                objconn.Close();
                for (int i = 0; i < smdt.Rows.Count; i++)
                {
                    ar.Add(smdt.Rows[i][0].ToString());
                }
                return smdt;
            }
        }

    2009年2月25日 上午 02:02
  •  DataTable dt  應該有包含欄位資訊


    Columns 取得屬於這個資料表的資料行集合



            public string col1="";
            public string col2="";
            public string col3="";
            public string col4="";
            public string col5="";
            public string col6="";

    或 public ArrayList ar = new ArrayList(); 

    應該無存在的意義.

    foreach(DataColumn column in table.Columns)
            {
                Console.WriteLine(row[column]);
            }
    2009年2月25日 上午 02:05