首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 發現之旅第三講:基於 XSLT 代碼生成器(八)

     編輯:關於C語言

LoadFromOracle 解析邏輯

  • 查詢 COL 視圖取得表名、欄位名、型別、長度。
  • 建立基本表/欄位物件樹。
  • 查詢 user_ind_columns 視圖取得索引欄位,索引名以 PK 開頭者視為主鍵。

完整代碼


public int LoadFromOracle(IDbConnection conn)
{
    FillStyle = FillStyleConst.Oracle;
    int count = 0;
    string sql = "SELECT TName, CName, coltype, width FROM Col ORDER BY TName, CName";
    Tables.Clear();

    if (conn is OleDbConnection)
        Name = ((OleDbConnection)conn).DataSource + " - " + conn.Database;
    else
        Name = conn.Database;

    using (IDbCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = sql;
        using (IDataReader rd = cmd.ExecuteReader(CommandBehavior.SingleResult))
        {
            TableInfo last = null;
            while (rd.Read())
            {
                string tn = rd.GetString(0).Trim();
                if (last == null || last.Name != tn)
                {
                    last = new TableInfo();
                    Tables.Add(last);
                    last.Name = tn;
                }
                FieldInfo f = new FieldInfo();
                last.Fields.Add(f);
                f.Name = rd.GetString(1);
                f.FieldType = rd.GetString(2);
                f.FieldWidth = rd[3].ToString();
                count++;
            }
        }

        cmd.CommandText = @"SELECT table_name, column_name, index_name
                            FROM user_ind_columns
                            ORDER BY table_name, column_name";
        using (IDataReader rd = cmd.ExecuteReader(CommandBehavior.SingleResult))
        {
            while (rd.Read())
            {
                var t = Tables[rd.GetString(0)];
                if (t != null)
                {
                    string idx = rd.GetString(2);
                    string fn = rd.GetString(1);
                    var f = t.Fields[fn];
                    if (f != null)
                    {
                        f.Indexed = true;
                        if (idx.StartsWith("PK")) f.PrimaryKey = true;
                    }
                }
            }
        }
    }
    return count;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved