ASP.NET如何獲得一個表的結構資訊

來源:互聯網
上載者:User

如何獲得一個表的結構資訊

hbzxf(阿好)
http://www.cnblogs.com/HBZXF

    最近項目中需要使用ASP.NET製作自訂查詢功能,根據表的欄位名稱與條件建立不同的查詢語句,這就需要知道如何通過ADO.NET把一個表的結構顯示出來,並綁定到需要顯示的控制項上,其實ADO.NET已經提供了相應的函數來做到這一點,下面通過詳細的代碼執行個體來察看結果。

    由於本人通過使用Webservice來返回資料的結果,便製作了GetTableSchema(string sqlStr)函數,詳細代碼如下:

  ///

  /// 名稱:Get

TableSchema
  /// 參數:string sqlStr,前台查詢語句
  /// 功能:獲得表結構
  /// 傳回值:DataSet
  ///
  [WebMethod(EnableSession=true,Description = "獲得表結構。")]
  public DataSet Get
TableSchema(string sqlStr)
  {
   DataSet ds = new DataSet();
   OleDbCommand cmd = new OleDbCommand(sqlStr,conn);
   conn.Open();
   OleDbDataReader read = cmd.ExecuteReader();
   DataTable tb = read.GetSchemaTable();//注意這句話
   ds.Tables.Add(tb);
   read.Close();
   conn.Close();
   return ds;
  }  

當建立好Webservice後,下面需要再前台把相應的表結構欄位資訊顯示到一個
DropDownList中。但是有一個問題要解決的是,我所要查詢的表欄位資訊在建表的時候都採用了英文欄位,如何把表的英文欄位變為中文欄位就需要一個臨時的DataSet來轉換一下,在臨時的DataSet中建立一個暫存資料表來儲存欄位的中文資訊和英文資訊的對照關係,通過遍理整個暫存資料表資訊來取出相對應的中文欄位資訊,並回顯到前台WebCombo中(註:由於本項目的使用者需求原因,我們採用WebCombo代替了開發人員的DropDownList)。詳細的代碼如下:

    //CheckBoxList cbl = new CheckBoxList();
    //複選框顯示方式為縱狀,每列現實3條紀錄
    cbl.RepeatColumns = 3;
    //cbl.RepeatDirection = Horizontal;
    //建立新的ListItem,存放試圖表中的列值
    ListItem li = new ListItem();
    
    DataSet d = new DataSet();
    DataTable t = new DataTable("t");//建立表t
    DataColumn c = new DataColumn();
    c.DataType = System.Type.GetType("System.String");
    c.ColumnName = "c";
    t.Columns.Add(c);
    DataColumn c1 = new DataColumn();
    c1.DataType = System.Type.GetType("System.String");
    c1.ColumnName = "c1";
    t.Columns.Add(c1);
    DataColumn c2 = new DataColumn();
    c2.DataType = System.Type.GetType("System.String");
    c2.ColumnName = "c2";
    t.Columns.Add(c2);
       //r["c"]:列的英文名字r["c1"]:列的中文名字r["c2"]:列的類型
    DataRow r;
     //通過試圖操作Webservice中的GetTableSchema函數來返回表的結構

    foreach(DataRow row in us.GetTableSchema("select * from zc_view_kpb").Tables[0].Rows)
    {
     r = t.NewRow();
     r["c"] = row["ColumnName"].ToString();
     string colname="";
     colname = row["ColumnName"].ToString();
     switch (colname)
     {
      case "KPID":
       r["c1"] = "卡片編號";
       break;
      case "ZJRQ":
       r["c1"] = "折舊日期";
       break;
      case "ZCMLID":
       r["c1"] = "資產目錄編號";
       break;
      default:
       break;
     }
     //逐個添加列的名字到複選框中
    //cbl是一個CheckBoxList控制項,顯示表結構所有欄位資訊,意思是讓使用者可以選擇不同的欄位內容並自動產生DataGrid的列資訊,供使用者瀏覽,在此不必理會
     cbl.Items.Add(new ListItem(r["c1"].ToString(),colname));
     //在r["c2"]中儲存的內容為欄位的類型+英文名稱

     r["c2"] = row["ProviderType"].ToString()+colname;
     t.Rows.Add(r);
    }

    //產生表,並綁頂到下拉式清單
    //Wcol為WebCombo控制項名稱

    d.Tables.Add(t);
    this.WCol.DataSource = d;
    this.WCol.DataMember = d.Tables["t"].ToString();
    this.WCol.DataTextField = "c1";
    this.WCol.DataValueField = "c2";
    this.WCol.DataBind();

  到此,我們已經把表的欄位資訊綁定到了需要的控制項上,如果要幫定到DropDownList是同樣的道理,大家不妨試一下。

由於個人水平有限,代碼不免很亂,希望諒解!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.