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

时间: 2024-09-18 19:36:14

如何利用C#代码获取SQLite数据库的元数据的相关文章

visual studio-vs怎么样代码获取Mysql数据库中的主键

问题描述 vs怎么样代码获取Mysql数据库中的主键 100C 我正在做代码生成器,其中要获取数据库中的主键和外键以及自动增加列.下面是具体的代码,给位大神们我应该怎样升级这个代码 解决方案 解决方案二: 解决方案三: SELECT k.column_nameFROM information_schema.table_constraints tJOIN information_schema.key_column_usage kUSING (constraint_nametable_schemat

Android SQLite数据库操作代码类分享_Android

使用示例: package cn.hackcoder.beautyreader.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by hackcoder on 15-1-25. */ public clas

c++获取sqlite3数据库表中所有字段的方法小结_C 语言

常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 下面针对这三个方法给大家逐一详细介绍. 方法1:使用sqlite3_get_table函数 代码: char *dbname = "test.db"; int rc = sqlite3_open(dbname, &db); if (rc == SQLITE_OK) { char sql[256]

android-不能打开 SQLite 数据库

问题描述 不能打开 SQLite 数据库 我使用下面的代码打开 SQLite 数据库: dbHelper = new DataBaseHelper(context); public static void open() throws SQLException { try { database = dbHelper.getWritableDatabase(); } catch (Exception e) { e.printStackTrace(); Log.d(Tag.getTag("open()

如何从sqlite数据库中获取数据并显示在listview中?

问题描述 如何从sqlite数据库中获取数据并显示在listview中? 在登录页面后,我想在listview中把Apple显示成A,Boy显示成B等等,直到F.但是在程序中当我完全登录后,只有登录表成功创建,主菜单还是没有创建. 我想在test database中创建主菜单,然后我想从主菜单表(mainmenu table)中获取数据再显示在listview中. 我使用了下面的代码: if(username.length()>0&&password.length()>0) {

android-我想把SQLite数据库里的数据显示到ListView上,代码有什么问题吗?

问题描述 我想把SQLite数据库里的数据显示到ListView上,代码有什么问题吗? private ListView listview = null; private List> list = new ArrayList>(); private SimpleAdapter simpleAdapter = null; private ImageView iv; public void onCreate(Bundle savedInstanceState) { super.onCreate(s

php读取sqlite数据库入门实例代码_javascript技巧

SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了. 它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快. 单

利用MS SQL实现异构数据库的分布式查询的t-sql代码

分布式|数据|数据库         /*利用MS SQL实现异构数据库的分布式查询的t-sql代码*/ exec sp_addlinkedserver  'MS_SQL','','SQLOLEDB','172.18.9.20'exec sp_addlinkedsrvlogin 'MS_SQL','false',null,'Sa','capec' /*创建一个sqlserver对sqlserver的数据库远程链接*/ exec sp_addlinkedserver 'ora', 'Oracle'

sqlite-Android 用Gson解析从服务器获取的JSON数据,存入SQLite数据库

问题描述 Android 用Gson解析从服务器获取的JSON数据,存入SQLite数据库 比如这么一段JSON数据,用Gson解析后存在这几个model里面 然后想存入SQLite本地数据库中. 如果数据库建表 那要怎么建?字段里面需要List<>而且还需要关联其他表. 而且我不知道这种方法是不是好,网上找到一种简便的方法.每次取得JSON数据以String类型保存到SharedPreference中,然后用的时候取出来再用Gson解析,我感觉这挺方便的,但不知实际开发中是怎么用的?说实话有