none
c# SQLite上如何查询关系表上包含“某列某行”的表名?sql server上可以用游标和变量解决。sqlite不支持变量和游标,怎么做到? RRS feed

  • 问题

  • 有一个关系表内容如下

    table_name    其他的列……

    aaaa              

    bbbb

    cccc

    dddd

    eeee

    ……

    table_name列记录的是表名,是实际存在的,这些表的结构是完全相同的。我要查询关系表中包含"k列a值"的全部表名。在sql server中可以使用游标和变量解决,而sqlite中不支持变量和游标。如果sqlite不能解决,那c#的ado或linq中有什么便捷的方法吗?不想在c#读取数据库一个一个读出来,然后判断。





    2016年12月1日 6:18

答案

  • 你好,

    只能顺着查了,先查所有的表中,是否有K列,如果有的话,在查K列中,是否有a值,如果有的话,把表名放到一个List中。

    可以通过 下面的代码来获取表的列信息。

    PRAGMA table_info('table_name') 

    然后用下面的方法循环判断.

     string connectionString = @"Data Source=D:\Data\SqlLite\Test.db; Version=3; FailIfMissing=True; Foreign Keys=True;";
                try
                {
                    using (SQLiteConnection conn = new SQLiteConnection(connectionString))
                    {
                        conn.Open();
                        string sql = "PRAGMA table_info('user')";
                        using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                        {
                            using (SQLiteDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    string test = reader["name"].ToString();
                                }
                            }
                        }
                        conn.Close();
                    }
                }
                catch (SQLiteException ex)
                {
                    MessageBox.Show(ex.Message);
                }

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2016年12月2日 1:08
    版主

全部回复

  • sqllite没有sql server中的元数据/视图(select * from sys.tables where name='abc')的概念,

    我认为还是要通过"c#读取数据库一个一个读出来,然后判断"


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年12月1日 7:21
  • 你好,

    只能顺着查了,先查所有的表中,是否有K列,如果有的话,在查K列中,是否有a值,如果有的话,把表名放到一个List中。

    可以通过 下面的代码来获取表的列信息。

    PRAGMA table_info('table_name') 

    然后用下面的方法循环判断.

     string connectionString = @"Data Source=D:\Data\SqlLite\Test.db; Version=3; FailIfMissing=True; Foreign Keys=True;";
                try
                {
                    using (SQLiteConnection conn = new SQLiteConnection(connectionString))
                    {
                        conn.Open();
                        string sql = "PRAGMA table_info('user')";
                        using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                        {
                            using (SQLiteDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    string test = reader["name"].ToString();
                                }
                            }
                        }
                        conn.Close();
                    }
                }
                catch (SQLiteException ex)
                {
                    MessageBox.Show(ex.Message);
                }

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2016年12月2日 1:08
    版主