Getting SQLite metadata with Csharp

简介: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;usin




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Data.SQLite.Linq;
/*
 * 参考资源 塗聚文 Geovin Du  Access,DB2,Informix,MySql,Oracle,PostgreSQL,SqlCe,SQLite,SqlServer,Sybase,Firebird
 http://zetcode.com/db/sqlitecsharp/meta/
 * http://sourceforge.net/projects/sqlitemetadata/files/?source=navbar
 * http://www.codeproject.com/Tips/810596/Csharp-VB-NET-Cplusplus-CLI-Create-read-and-write
 * https://dbschemareader.codeplex.com/
 * https://github.com/sqlitebrowser/sqlitebrowser/releases/tag/v3.5.1
 * http://stackoverflow.com/questions/15207045/determining-primary-key-columns-via-getschema
 * http://www.devart.com/dotconnect/sqlite/docs/MetaData.html
 * http://www.devart.com/dotconnect/mysql/docs/MetaData.html
 * http://www.devart.com/dotconnect/sqlserver/docs/MetaData.html
 * http://www.devart.com/dotconnect/db2/docs/MetaData.html
 * http://www.devart.com/dotconnect/sqlite/docs/MetaData.html
 * http://www.devart.com/dotconnect/oracle/articles/metadata.html
 * http://www.devart.com/dotconnect/postgresql/docs/MetaData.html
 * SQL Server Schema Collections
 * https://msdn.microsoft.com/en-us/library/ms254969.aspx
 * https://msdn.microsoft.com/en-us/library/kcax58fh.aspx
 * https://support.microsoft.com/en-us/kb/318452 Excel MetaData
 * CollectionName	#	Name
Columns	1	TABLE_CATALOG
Columns	2	TABLE_SCHEMA
Columns	3	TABLE_NAME
Columns	4	COLUMN_NAME
Indexes	1	TABLE_CATALOG
Indexes	2	TABLE_SCHEMA
Indexes	3	INDEX_NAME
Indexes	4	TYPE
Indexes	5	TABLE_NAME
Procedures	1	PROCEDURE_CATALOG
Procedures	2	PROCEDURE_SCHEMA
Procedures	3	PROCEDURE_NAME
Procedures	4	PROCEDURE_TYPE
Tables	1	TABLE_CATALOG
Tables	2	TABLE_SCHEMA
Tables	3	TABLE_NAME
Tables	4	TABLE_TYPE
Views	1	TABLE_CATALOG
Views	2	TABLE_SCHEMA
Views	3	TABLE_NAME
 * 
 * 
 * MetaDataCollections集合下有:
DataSourceInformation
DataTypes
ReservedWords
Catalogs
Columns
Indexes
IndexColumns
Tables
Views
ViewColumns
ForeignKeys
Triggers
 * 
 * 
 */


namespace PayrollPrint
{
    /// <summary>
    /// SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "Dom"
    /// SELECT count(*) FROM sqlite_master WHERE type = "view" AND name = "myView"
    /// 涂聚文 20150324 21:19
    /// </summary>
    public partial class SQLiteFileForm : Form
    {

        public string connectionString = "Data Source=geovindu;Version=3;Pooling=true;FailIfMissing=false;UTF8Encoding=True;";

        /// <summary>
        /// 3.8.5版本查詢
        /// </summary>
        /// <returns></returns>
        private DataTable setTables()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "TABLES");//所有表包括系统表
            dt.Rows.Add(2, "Indexes");//所有有主键的表
            dt.Rows.Add(3, "IndexColumns");//有键的表及主键
            dt.Rows.Add(4, "Views");//所有视图
            dt.Rows.Add(5, "DataTypes");//字段类型
            dt.Rows.Add(6, "Columns");//表的字段
            dt.Rows.Add(7, "Catalogs");//数据库文件地址
            dt.Rows.Add(8, "DatasourceInformation");//数据库文件版本等信息
            dt.Rows.Add(9, "ForeignKeyColumns");//无效
            dt.Rows.Add(10, "ForeignKeys");//外键
            dt.Rows.Add(11, "MetaDataCollections");//MetaData集合
            dt.Rows.Add(12, "PrimaryKeys");
            dt.Rows.Add(13, "ReservedWords");
            dt.Rows.Add(14, "Restrictions");
            dt.Rows.Add(15, "UniqueKeys");
            dt.Rows.Add(16, "ViewColumns");//视图的字段
            dt.Rows.Add(17, "Triggers");
            return dt;
        }

        /// <summary>
        /// 
        /// </summary>
        public SQLiteFileForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// select * from sqlite_master where type = 'table' and name ='myTable';
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SQLiteFileForm_Load(object sender, EventArgs e)
        {
            this.comboBox1.DataSource = setTables();
            this.comboBox1.DisplayMember = "name";
            this.comboBox1.ValueMember = "id";
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            //JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "files(*.db)|*.db|files (*.*)|*.*";//|(*.xlsx)|*.xlsx Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*  txt files (*.txt)|*.txt|All files (*.*)|*.*" 
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if (!openFileDialog1.FileName.Equals(String.Empty))
                {
                    connectionString = @"Data Source=" + openFileDialog1.FileName + ";Version=3;Pooling=true;FailIfMissing=false;UTF8Encoding=True;";
                    this.textBox1.Text = openFileDialog1.FileName;
                }
            }
        }
        /// <summary>
        /// TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_ID,TABLE_ROOTPAGE,TABLE_DEFINITION
        /// TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,INDEX_CATALOG,INDEX_SCHEMA,INDEX_NAME,PRIMARY_KEY,UNIQUE,CLUSTERED,TYPE,FILL_FACTOR,INITIAL_SIZE,NULLS,SORT_BOOKMARKS,AUTO_UPDATE,NULL_COLLATION,ORDINAL_POSITION,COLUMN_NAME,COLUMN_GUID,COLUMN_PROPID,COLLATION,CARDINALITY,PAGES,FILTER_CONDITION,INTEGRATED,INDEX_DEFINITION

        ///IndexColumns: CONSTRAINT_CATALOG,CONSTRAINT_SCHEMA,CONSTRAINT_NAME,TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION,INDEX_NAME,COLLATION_NAME,SORT_MODE,CONFLICT_OPTION
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            using (SQLiteConnection conn = new SQLiteConnection(connectionString))
            {
                conn.Open();
                //http://www.devart.com/dotconnect/sqlite/docs/MetaData.html
                //Catalogs,Columns,DatasourceInformation,DataTypes,ForeignKeyColumns,ForeignKeys,IndexColumns,Indexes,MetaDataCollections,PrimaryKeys,ReservedWords,Restrictions,Tables,UniqueKeys,ViewColumns,Views

                DataTable schemaTable = conn.GetSchema(this.comboBox1.Text);//(有键的表及主键)// conn.GetSchema("Indexes");(所有有主键的表)// conn.GetSchema("TABLES");(所有表包括系统表)//Views
                dataGridView1.DataSource = schemaTable;
                this.textBox2.Text = GetColumnNames(schemaTable);
            }

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static string GetColumnNames(System.Data.DataTable table)
        {
            if (table != null)
            {
                List<string> lstColumn = new List<string>();

                foreach (System.Data.DataColumn col in table.Columns)
                {
                    lstColumn.Add(col.ColumnName);
                }

                return String.Join(",", lstColumn.ToArray());
            }

            return string.Empty;
            //foreach (DataRow row in table.Rows)
            //{
            //    foreach (DataColumn column in table.Columns)
            //    {
            //        ColumnName = column.ColumnName;
            //        ColumnData = row[column].ToString();
            //    }
            //}
        }


目录
相关文章
|
1月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
183 0
|
6月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
358 14
|
10月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
1025 15
|
11月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
254 8
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
248 4
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
370 3
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
1829 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
288 2
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
780 1
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
488 3
C#winform中使用SQLite数据库