<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      如何利用C#代碼獲取SQLite數據庫的元數據

      Sqlite數據庫,在很多場合已經用得比較多,由于我的代碼生成工具的需要,需要把Sqlite的表、字段、視圖等信息獲取出來,以便實現各種數據庫快速生成項目工程的操作。這里就需要利用C#獲取Sqlite數據庫的元數據了,和其他數據庫一樣。

      為了獲取Sqlite的數據庫對象數據,我做了一個測試的例子來獲取他的相關信息,其實它的元數據還是和Access的操作方式很接近。首先我們先通過Sqlite的數據庫管理工具或者Visual Studio來打開創建一些表,如下所示。

      首先我們先來看看通過C#代碼獲取到數據庫對象的操作界面,如下所示。

      獲取表的元數據界面效果如下所示,視圖和這個也查不多,很有意思的一點,就是它把創建的腳本的顯示出來了,呵呵。

      獲取的表字段信息效果如下所示。

      有了這些數據,我就很方便在我的代碼生成工具Database2Sharp里面實現代碼生成操作了。

      現在我們來看看以上實現的后臺代碼是如何的,來了解Sqlite的數據庫獲取元數據的操作。

              string connectionString = "";
      
              public Form1()
              {
                  InitializeComponent();
      
                  connectionString = string.Format(@"Data Source={0}\OrderWater.db;Version=3;", Application.StartupPath);
              }
      
              private void btnGetSchema_Click(object sender, EventArgs e)
              {
                  using (SQLiteConnection conn = new SQLiteConnection(connectionString))
                  {
                      conn.Open();
                      DataTable schemaTable = conn.GetSchema("TABLES");
                      this.dataGridView1.DataSource = schemaTable;
                  }
              }
      

      獲取表字段的操作代碼如下所示。

              private void btnGetColumns_Click(object sender, EventArgs e)
              {
                  using (SQLiteConnection conn = new SQLiteConnection(connectionString))
                  {
                      conn.Open();
                      DataTable table = conn.GetSchema("TABLES");
                      if (table != null && table.Rows.Count > 0)
                      {
                          string tableName = table.Rows[0]["TABLE_NAME"].ToString();
      
                          DataTable schemaTable = GetReaderSchema(tableName, conn);
                          this.dataGridView1.DataSource = schemaTable;
                      }
                  }
              }
      
              private DataTable GetReaderSchema(string tableName, SQLiteConnection connection)
              {
                  DataTable schemaTable = null;
                  IDbCommand cmd = new SQLiteCommand();
                  cmd.CommandText = string.Format("select * from [{0}]", tableName);
                  cmd.Connection = connection;
      
                  using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly))
                  {
                      schemaTable = reader.GetSchemaTable();
                  }
                  return schemaTable;
              }
      

      為了實現和我代碼生成工具中的數據庫字段信息綁定,需要通過獲取設置Sqlite的屬性為對應的ColumnInfo對象,如下所示。

                  using (SQLiteConnection conn = new SQLiteConnection(ConnectString))
                  {
                      conn.Open();
                      DataTable schemaTable = GetReaderSchema(tableName, conn);
      
                      foreach (DataRow dr in schemaTable.Rows)
                      {
                          ColumnInfo info = new ColumnInfo();
                          info.Name = new NameElement(dr["ColumnName"].ToString());
                          info.Ordinal = Convert.ToInt32(dr["ColumnOrdinal"].ToString());
                          info.AllowDBNull = (bool)dr["AllowDBNull"];
                          info.MaxLength = Convert.ToInt32(dr["ColumnSize"].ToString());
                          info.DataTypeId = Convert.ToInt32(dr["ProviderType"].ToString());
                          info.DataType = dr["DataTypeName"].ToString().Trim();
                          info.AutoIncrement = (bool)dr["IsAutoIncrement"];
                          info.IsPrimaryKey = (bool)dr["IsKey"];
                          info.Unique = (bool)dr["IsUnique"];
                          info.IsReadOnly = (bool)dr["IsReadOnly"];
                          string netType = dr["DataType"].ToString();
      
                          list.Add(info.Name.Name.ToString(), info);
                      }
      
                      conn.Close();
                  }
      

      代碼生成工具中,這些數據庫的元數據實體類信息是可以提供訪問的,方便我們定制代碼生成工具的模板,代碼生成工具關于這些數據庫對象的幫助如下所示。

       

      這樣,在代碼生成工具中,就可以利用Sqlite的數據庫對象數據,來生成和Oracle數據庫、SqlServer數據庫、Access數據庫、MySql等數據庫一樣的項目工程代碼了,獲取甚至可以在自定義的模板代碼模塊中,添加自己的處理邏輯。

      快速生成的代碼如下所示。

      本文通過介紹獲取Sqlite的數據庫元數據庫,并在代碼生成工具中的應用為例,給大家提供一個使用元數據進行程序開發的一個思路,希望大家可以同這種方式實現更多自定義模板或者邏輯的引用。

      天下雖大同,一直在努力,孜孜不倦,終有所獲。

      posted on 2012-03-09 19:31  伍華聰  閱讀(14059)  評論(2)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产精品揄拍一区二区久久| 亚洲欧洲美洲在线观看| 午夜成人性爽爽免费视频| 欧美视频二区欧美影视| 亚洲中文字幕一二三四区| 视频一区二区不中文字幕| 国产精品午夜av福利| 亚洲AV无码破坏版在线观看| 国产欧美日韩另类精彩视频| 正蓝旗| 国产偷国产偷亚洲高清日韩| 亚洲中文久久久精品无码| 无码帝国www无码专区色综合 | 亚洲国产欧美日韩欧美特级| 久久蜜臀av一区三区| 少妇人妻偷人精品免费视频| 亚洲第一天堂无码专区| 四虎永久免费高清视频| 水蜜桃视频在线观看免费18| 乱色欧美激惰| 综合色一色综合久久网| 国产95在线 | 亚洲| 韩国美女福利视频一区二区| 日韩av中文字幕有码| 色情一区二区三区免费看| 性色av一区二区三区精品| 国产对白老熟女正在播放| 新化县| 精品国产亚洲午夜精品a| 免费人成网站视频在线观看| 午夜精品福利亚洲国产| 97精品伊人久久久大香线蕉| 亚洲人成影院在线观看| 久久综合97丁香色香蕉| 四虎女优在线视频免费看| 日韩精品欧美高清区| 亚洲人成小说网站色在线| 国产精品国产三级国产试看| 亚洲精品乱码久久久久久按摩高清| 亚洲精品国产自在现线最新| 人妻系列无码专区69影院|