开发者社区> walb呀> 正文

如何利用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的数据库元数据库,并在代码生成工具中的应用为例,给大家提供一个使用元数据进行程序开发的一个思路,希望大家可以同这种方式实现更多自定义模板或者逻辑的引用。

天下虽大同,一直在努力,孜孜不倦,终有所获。

本文转自博客园伍华聪的博客,原文链接:如何利用C#代码获取SQLite数据库的元数据,如需转载请自行联系原博主。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
谈谈元数据和数据字典的区别
今天在群里有朋友讨论元数据和数据字典的问题,元数据是解释数据的数据,数据字典也能解释数据,不都是解释数据的吗,怎们不同呢?接下来咱们就简单的讨论下这个问题,希望读完本文再没有这种困惑。
197 0
SQLite 数据库编程获取数据表达方式分析信息 | 学习笔记
快速学习 SQLite 数据库编程获取数据表达方式分析信息
23 0
存储一对一源码数据,可以使用哪些工具
使用图形数据库,一对一源码可以将数据用图片的形式进行存储,而且它使用了灵活的图形模型,可以部署到多台服务器上。
69 0
iOS数据持久化之二——归档与设计可存储化的数据模型基类(二)
iOS数据持久化之二——归档与设计可存储化的数据模型基类
117 0
iOS数据持久化之二——归档与设计可存储化的数据模型基类(一)
iOS数据持久化之二——归档与设计可存储化的数据模型基类
69 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
实战-如何基于HBase构建图片视频数据的统一存储检索方案
立即下载
PostgresChina2018_黄晓涛_通过FDW对大容量非结构化文件的管理和访问
立即下载
如何使用Tair增强数据结构构建丰富在线实时场景
立即下载