none
讀取資料庫中資料表及欄位名稱 RRS feed

  • 問題

  • 使用c#及access希望能存取某一資料庫中的資料表及欄位名稱,希望能動態的顯示在COMBO BOX控制項

    從閱讀討論區中文章雖然有了一些方向

    但實作時會卻出現了

    "ExecuteReader 必須有開啟與可用的連接。連接目前的狀態已關閉。"的錯誤訊息,程式碼如下:

            //表單上有兩個combo box控制項  cbxTBName存放資料表名稱,cbxField存放資料表欄位名稱
            private void Form1_Load(object sender, EventArgs e

            {
                String strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\test.mdb";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"TABLE"});      

                foreach (System.Data.DataRow row in dt.Rows)//取得資料表名稱,然後放進combo box
                {
                    cbxTBName.Items.Add(row["TABLE_NAME"].ToString());
                }
           }


            private void cbxTBName_SelectedIndexChanged(object sender, EventArgs e)
            {
                String strSelectedItem = cbxTBName.SelectedItem.ToString();
                String strQuery;
                String strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\test.mdb";
                strQuery = "SELECT * FROM " + strSelectedItem;
                OleDbConnection conn = new OleDbConnection(strConn);
                OleDbCommand comm = new OleDbCommand(strQuery, conn);
                OleDbDataReader DR = comm.ExecuteReader();
                //依照選擇的資料表名稱,combo box填入相對應的欄位名稱
                for (int i = 0; i < DR.FieldCount; i++)
                    cbxField.Items.Add(DR.GetName(i));

            }

     

    2006年12月28日 上午 10:44

解答

  •         private void cbxTBName_SelectedIndexChanged(object sender, EventArgs e)
            {
                String strSelectedItem = cbxTBName.SelectedItem.ToString();
                String strQuery;
                String strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\test.mdb";
                strQuery = "SELECT * FROM " + strSelectedItem;
                OleDbConnection conn = new OleDbConnection(strConn);
                OleDbCommand comm = new OleDbCommand(strQuery, conn);
                conn.Open();
                OleDbDataReader DR = comm.ExecuteReader();
               
    //依照選擇的資料表名稱,combo box填入相對應的欄位名稱
                for (int i = 0; i < DR.FieldCount; i++)
                    cbxField.Items.Add(DR.GetName(i));

                conn.Close();
            }
    2006年12月28日 上午 11:08
    版主

所有回覆

  •         private void cbxTBName_SelectedIndexChanged(object sender, EventArgs e)
            {
                String strSelectedItem = cbxTBName.SelectedItem.ToString();
                String strQuery;
                String strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\test.mdb";
                strQuery = "SELECT * FROM " + strSelectedItem;
                OleDbConnection conn = new OleDbConnection(strConn);
                OleDbCommand comm = new OleDbCommand(strQuery, conn);
                conn.Open();
                OleDbDataReader DR = comm.ExecuteReader();
               
    //依照選擇的資料表名稱,combo box填入相對應的欄位名稱
                for (int i = 0; i < DR.FieldCount; i++)
                    cbxField.Items.Add(DR.GetName(i));

                conn.Close();
            }
    2006年12月28日 上午 11:08
    版主
  • 感謝您~~~
    2006年12月29日 上午 03:49