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



目录
相关文章
|
24天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
164 0
|
1月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
1月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
18 2
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
11天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
16 0
|
25天前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
|
29天前
|
SQL Oracle 关系型数据库
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
11 0
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
38 0
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
18 0