Access911.net   |   a9BBS   |   OTaA System  
  搜索文章︰  
Access911歡迎您光臨  
   主頁      上傳      简体版       論壇     
設為首頁  |  加入收藏   
  
你現在的位置︰文章索引 -> 文章分類 -> ADO/DAO/ADO.NET  
 首頁|  近日更新|  下載  |  文章索引  |  搜索|  朮語|  承接工程|  
 
系統正在加載內容,請耐心等待...
 
 查詢
 窗体
 報表
 
 
 VBA
 函數
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 發布
 OA
 ASP/ASP.NET
 其他語言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用軟件
 參考文檔
 業主作品
 网友大作
 
 
友情鏈接
 access911.net
 
訪問人次
 1701841
 
站長 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 訂閱

顯示附加信息 >>>

如何用ADO.NET取表的數據結構,如字段類型字段名?

作者︰cg1  摘自︰access911.net  ︰cg1  更新日期︰2012-9-24  瀏覽人次︰

 

一般有3种方法。

用 ADO.NET 直接執行普通 SQL 語句 SELECT * FROM TABLE ,然後根據返回的記錄集的結構來獲取結構,ColumnName 就是 select 時的別名。
用 SQL SERVER SMO 對象直接獲取數據表的結構。
用 ADO.NET 執行獲取 SQL SERVER 系統表的 SQL 語句,然後根據返回集中記錄的數據來獲取結構。

下面是草稿,直接摘錄了

以下是一個 dbtoview.ASHX.cs 文件的源代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Diagnostics;

namespace demo_ASP4
{
    /// <summary>
    /// DbToView 的摘要說明
    /// </summary>
    public class DbToView : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");
            SqlConnection conn = new SqlConnection();
            DataTable schemaTable;
            DataRow schemaRow;
            DataColumn schemaColumn;
            conn.ConnectionString = "Data Source=localhost;Initial Catalog=KBData;User ID=sa;Password=q1W2e3R4";
            conn.Open();
            SqlCommand cmd = new SqlCommand()
            {
                CommandType = System.Data.CommandType.Text,
                CommandText = "select * from t_topics",
                Connection = conn

            };
            
            SqlDataReader rd = cmd.ExecuteReader();
            while (rd.Read()) {
                context.Response.Write(rd["title"].ToString());
            }
            //rd.Close();
            //獲取結構
            //rd = cmd.ExecuteReader(CommandBehavior.KeyInfo);
            schemaTable = rd.GetSchemaTable();
            for (int i=0;i<schemaTable.Rows.Count;i++)
            {
                schemaRow= schemaTable.Rows[i];
                for (int i2 = 0; i2 < schemaTable.Columns.Count;i2++ )
                {
                    schemaColumn = schemaTable.Columns[i2];
                    Debug.Print("FieldName:{0},  PropertyName:{1},   PropValue:{2}", "", schemaColumn.ColumnName, schemaRow[i2].ToString());
                }
            }

            //For each field in the table...
            foreach (DataRow myField in schemaTable.Rows)
            {
                //For each property of the field...
                foreach (DataColumn myProperty in schemaTable.Columns)
                {
                    //Display the field name and value.
                    Debug.Print(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                    //Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                }
                Debug.Print("-------------------");
                //Debug.Print("FieldName:{0},\tFieldDataType:{1},\tColumnSize:{2},\tIsKey:{3},\tAllowDBNull{4}", 
                //    myField["ColumnName"].ToString(), 
                //    myField["DataTypeName"].ToString(), 
                //    myField["ColumnSize"].ToString(),
                //    myField["IsKey"].ToString(),
                //    myField["AllowDBNull"].ToString());
            }

            //For each field in the table...
            foreach (DataRow myField in schemaTable.Rows)
            {
                Debug.Print("-------------------");
                Debug.Print("Index:{0},\tFieldName:{1},\tFieldDataType:{2},\tColumnSize:{3},\tIsKey:{4},\tAllowDBNull:{5}",
                    myField["ColumnOrdinal"].ToString(),
                    myField["ColumnName"].ToString(),
                    myField["DataTypeName"].ToString(),
                    myField["ColumnSize"].ToString(),
                    myField["IsKey"].ToString(),
                    myField["AllowDBNull"].ToString());
            }

            //按字段名直接過濾出某個字段的數據結構,并將數據結構放到 DataRow 對象中。
            //由于字段名不會重复,所以這個DataRow[]數組對象的長度應該永遠為1
            DataRow[] selectRow = schemaTable.Select("ColumnName='CreateDate'");
            Debug.Print("過濾出 CreateDate 相關資料 \t{0}", selectRow.Length.ToString());
            if (selectRow.Length == 1) {
                //通過這樣,可以直接寫個函數取出數據結構
                Debug.Print("{0}\t{1}", selectRow[0]["ColumnName"].ToString(),
                        selectRow[0]["DataTypeName"].ToString());
            }


            rd.Close();
            conn.Close();
            

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

 

 
相關文章
     沒有手動相關文章
 
評論
     查看或發表更多的評論,請單擊這里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期︰2000年4月2日  |  設計施工︰陳格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陳格 保留所有權利