如何利用C#代码获取SQLite的元数据

简介:

SQLite数据库,在很多场合已经用得比较多,由于我的代码生成工具的需要,需要把SQLite的表、字段、视图等信息获取出来,以便实现各种数据库快速生成项目工程的操作。这里就需要利用C#获取SQLite数据库的元数据了,和其他数据库一样。

  为了获取SQLite的数据库对象数据,我做了一个测试的例子来获取他的相关信息,其实它的元数据还是和Access的操作方式很接近。首先我们先通过SQLite的数据库管理工具或者Visual Studio来打开创建一些表,如下所示。

如何利用C#代码获取SQLite的元数据

  首先我们先来看看通过C#代码获取到数据库对象的操作界面,如下所示。

如何利用C#代码获取SQLite的元数据

  获取表的元数据界面效果如下所示,视图和这个也查不多,很有意思的一点,就是它把创建的脚本的显示出来了。

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

如何利用C#代码获取SQLite的元数据

  有了这些数据,我就很方便在我的代码生成工具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();
}
代码生成工具中,这些数据库的元数据实体类信息是可以提供访问的,方便我们定制代码生成工具的模板,代码生成工具关于这些数据库对象的帮助如下所示。

如何利用C#代码获取SQLite的元数据

  这样,在代码生成工具中,就可以利用SQLite的数据库对象数据,来生成和Oracle数据库、SqlServer数据库、Access数据库、MySql等数据库一样的项目工程代码了,获取甚至可以在自定义的模板代码模块中,添加自己的处理逻辑。

如何利用C#代码获取SQLite的元数据

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

如何利用C#代码获取SQLite的元数据

  本文通过介绍获取SQLite的数据库元数据库,并在代码生成工具中的应用为例,给大家提供一个使用元数据进行程序开发的一个思路,希望大家可以同这种方式实现更多自定义模板或者逻辑的引用。








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/806977,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
4月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
4月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
5月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
40 0
|
6月前
|
C#
Visual Studio C# CS0006 C# 未能找到元数据文件
Visual Studio C# CS0006 C# 未能找到元数据文件
66 0
Visual Studio C# CS0006 C# 未能找到元数据文件
|
6月前
|
开发框架 .NET C#
如何调试 C# Emit 生成的动态代码?
如何调试 C# Emit 生成的动态代码?
|
5月前
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
96 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
|
3月前
|
数据采集 JSON 前端开发
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。
|
4月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
32 0
|
4月前
|
C# 数据库 数据库管理
C#使用Poco链接SQLite数据库配置文件和错误的解决
C#使用Poco链接SQLite数据库配置文件和错误的解决
24 1