WithCoderWithCoderWithCoder

C#对SQLite数据表的操作(创建、删除、查看表结构)

    一、创建数据表    

    SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。

    在C#中,创建数据表的主要步骤如下:   

    1、建立数据库连接;

    2、打开数据库(如果没有数据库,Open 也会新创建一个数据库);

    3、声明一个 SQLiteCommand 类,用来放置和运行 SQL 命令;

    4、把 SQLiteCommand 的 Connection 和 SQLiteConnection 关联起来;

    5、往 SQLiteCommand 的 CommandText 输入 SQL 语句;

    6、调用 SQLiteCommand.ExcuteNonQuery() 方法执行命令,创建数据表;

    7、关闭数据库连接;

    示例代码如下:

        /// <summary>
        /// 执行sql
        /// </summary>
        /// <param name="fileName">数据库文件路径</param>
        /// <param name="password">数据库密码</param>
        /// <param name="sql">sql语句</param>
        /// <returns></returns>
        public static string ExecSql(string fileName, string password, string sql)
        {
            try
            {
                string connStr = GetConnStr(fileName, password);
                SQLiteConnection conn = new SQLiteConnection(connStr);
                if (conn.State != System.Data.ConnectionState.Open)
                {
                    conn.Open();
                }
                SQLiteCommand cmd = new SQLiteCommand();
                cmd.Connection = conn;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                conn.Close();
                return string.Empty;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
        
        private static string GetConnStr(string fileName, string passwor)
        {
            string[] paraArr = new string[] { "Data Source=", fileName, ";Version=3;Password=", passwor, ";" };
            return string.Concat(paraArr);
        }

    测试调用例子如下:   

        private void button_Click(object sender, EventArgs e)
        {
            // 表创建语句
            string sql = "CREATE TABLE IF NOT EXISTS tn_member(id integer,name varchar(20));";
            string res = SqliteHelper.ExecSql(@"E:\db\test.db", "", sql);
            if (string.IsNullOrEmpty(res))
            {
                MessageBox.Show("ok");
            }
            else
            {
                MessageBox.Show(res);
            }
        }

    通过指定数据库文件的路径以及密码,并传入指定的创建语句,将在数据库中创建对应的表。sql语句和其他数据库如sqlserver、mysql等大同小异。

    二、删除数据表

    有了上面创建表的过程,删除表操作基本相同,只是把执行的 SQL 语句改为删除语句即可:

        private void button_Click(object sender, EventArgs e)
        {
            // 创建表sql
            //string sql = "CREATE TABLE IF NOT EXISTS tn_member(id integer,name varchar(20));";
            // 删除表sql
            string sql = "DROP TABLE IF EXISTS tn_member;";
            string res = SqliteHelper.ExecSql(@"E:\db\test.db", "", sql);
            if (string.IsNullOrEmpty(res))
            {
                MessageBox.Show("ok");
            }
            else
            {
                MessageBox.Show(res);
            }
        }

    三、查询表结构

    查看SQLite表的结果,需要用到 SQLite 特殊的 PRAGMA 命令:PRAGMA table_info(tablename) ,tablename 用或不用单引号 ' ' 括起来都一样。此命令执行后,返回的结果数据结构如下:


下标名称描述
0cid序号
1name字段名
2type数据类型
3notnull能否null值,0不能,1 能
4dflt_value缺省值
5pk是否主键primary key,0否,1是

    要得到返回结果,可以使用以下方式:


    3.1 用 DataAdapter 和 DataTable 类,代码如下:   

        /// <summary>
        /// 表结构
        /// </summary>
        /// <param name="fileName">数据库文件路径</param>
        /// <param name="password">数据库密码</param>
        /// <param name="tableName">表名称</param>
        /// <returns></returns>
        public static DataTable TableSchema(string fileName, string password, string tableName)
        {
            try
            {
                string connStr = GetConnStr(fileName, password);
                SQLiteConnection conn = new SQLiteConnection(connStr);
                if (conn.State != System.Data.ConnectionState.Open)
                {
                    conn.Open();
                }
                string sql = $"PRAGMA table_info('{tableName}')";
                SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                // 将结果通过DataAdapter存入DataTable
                DataTable table = new DataTable();
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
                adapter.Fill(table);
                return table;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        
        private static string GetConnStr(string fileName, string passwor)
        {
            string[] paraArr = new string[] { "Data Source=", fileName, ";Version=3;Password=", passwor, ";" };
            return string.Concat(paraArr);
        }

     3.2 用DataReader(这个效率高些),代码如下:   

        /// <summary>
        /// 表结构
        /// </summary>
        /// <param name="fileName">数据库文件路径</param>
        /// <param name="password">数据库密码</param>
        /// <param name="tableName">表名称</param>
        /// <returns></returns>
        public static void TableSchema(string fileName, string password, string tableName)
        {
            try
            {
                string connStr = GetConnStr(fileName, password);
                SQLiteConnection conn = new SQLiteConnection(connStr);
                if (conn.State != System.Data.ConnectionState.Open)
                {
                    conn.Open();
                }
                string sql = $"PRAGMA table_info('{tableName}')";
                SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                SQLiteDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        Console.Write($"{reader[i]},");
                    }
                    Console.WriteLine();
                }
                reader.Close();
            }
            catch (Exception ex)
            {
            }
        }
        
        private static string GetConnStr(string fileName, string passwor)
        {
            string[] paraArr = new string[] { "Data Source=", fileName, ";Version=3;Password=", passwor, ";" };
            return string.Concat(paraArr);
        }


欢迎分享交流,转载请注明出处:WithCoder » C#对SQLite数据表的操作(创建、删除、查看表结构)