如何利用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数据库的元数据,如需转载请自行联系原博主。



目录
相关文章
|
3月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
152 6
|
26天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
180 15
|
10天前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
2月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
53 8
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
3月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
52 4
|
3月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
59 0
|
12天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3