从SQLite数据库中遍历出所有的表和索引【用于项目中数据库的复原】

1.语法介绍

每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 它定义数据库的模式。 SQLITE_MASTER 表看起来如下:

CREATE TABLE sqlite_master
 (
  type TEXT,
  name TEXT,
  tbl_name TEXT,
  rootpage INTEGER,
  sql TEXT
);

对于表来说,type 字段永远是 ‘table’,name 字段永远是表的名字。所以,要获得数据库中所有表的列表, 使用下列SELECT语句:

SELECT * FROM sqlite_master WHERE type='table' ORDER BY name;

对于索引,type 等于 ‘index’, name 则是索引的名字,tbl_name 是该索引所属的表的名字。 不管是表还是索引,sql 字段是原先用 CREATE TABLE 或 CREATE INDEX 语句创建它们时的命令文本【注,转自https://blog.csdn.net/niukailun523/article/details/8441964】。

2.工程实例

项目要求:假如你备份一个数据库,在某一天需要复原数据库,这时需要把数据库中表的名字写到XML中,同时在在treeview中显示。这么做的的前提就是你需要遍历数据库中存在几张表,原理如上。
核心代码如下:

        private void button3_Click(object sender, EventArgs e)
        {
            if(textBox3.Text.Trim()=="")
            {
                MessageBox.Show("请选择需要复原的数据库!");
            }
            else
            {
                //设计思路:把数据的名字和他里面的几张表都写到XML中,同时在在treeview中显示
                //先读取数据库中有几张表
                //连接数据库
                string startpath = textBox3.Text.Trim(); //数据库的地址
                SQLiteConnection conn = new SQLiteConnection();
                SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();
                connstr.DataSource = startpath;
                conn.ConnectionString = connstr.ToString();
                conn.Open();
                // DataSet dataset = new DataSet();
                SQLiteCommand cmd = new SQLiteCommand();
                string sql = "SELECT * FROM sqlite_master WHERE type = 'table' ORDER BY name;";
                List<object> tempstring = new List<object>();
                
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    DataRow[] tbs = dt.Select("type = 'table'");
                    foreach (var tb in tbs)
                        tempstring.Add(tb["name"]);//这里就存储了你的表,哈哈完成,你已经提取出你的表明
                }          
                conn.Close();
                conn.Dispose();
               
            }
        }

【https://blog.csdn.net/gy0124/article/details/107069880/】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值