C# 如何使用C检查.sqlite文件中是否存在表#
我正在创建一个WPF程序,用户可以在其中创建存储在.sqlite数据库中的产品列表。每个产品列表在数据库中都有自己的表,用户可以选择谁的名字。当我尝试创建表时,我需要弄清楚表是否已经存在,以便如果已经存在,我可以要求用户选择其他名称 我知道C# 如何使用C检查.sqlite文件中是否存在表#,c#,sqlite,C#,Sqlite,我正在创建一个WPF程序,用户可以在其中创建存储在.sqlite数据库中的产品列表。每个产品列表在数据库中都有自己的表,用户可以选择谁的名字。当我尝试创建表时,我需要弄清楚表是否已经存在,以便如果已经存在,我可以要求用户选择其他名称 我知道 SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}'; 查询是否用于检查表是否存在,但如何使用c#以布尔形式获取此语句 我会假设类似于 SQLiteConnect
SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
查询是否用于检查表是否存在,但如何使用c#以布尔形式获取此语句
我会假设类似于
SQLiteConnection connection = new SQLiteConnection("Data Source=filepath;Version=3");
sql = "SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';"
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.something();
但是我不确定使用命令的哪个函数来获取此查询的布尔值以及如何对其进行格式化。ExecuteNonQuery()
为SELECT语句返回-1,因此在这种情况下使用它是不合适的
尝试使用ExecuteReader()
,它返回一个包含HasRows
属性的类,如果结果集为非空,则该属性应为true
守则:
SQLiteConnection connection = new SQLiteConnection("Data Source=filepath;Version=3");
sql = "SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';"
SQLiteCommand command = new SQLiteCommand(sql, connection);
try
{
var result = command.ExecuteReader();
if (result.HasRows)
{
// INSERT statement here
}
}
catch (Exception e)
{
throw e;
}
如果您想要结果,请不要使用ExecuteNonQuery()。您可以选择计数并查看其是否大于0。您还可以获取一个数据读取器,查看HasRows
属性是否为true。如本例所示,您需要一个读取器来读取查询结果。唐';如果执行查询,请不要使用ExecuteOnQuery;)我不确定使用什么代替ExecuteOnQuery()。如何选择计数?数据库中有多少表的计数对我来说是不好的,因为用户创建的表可能有几个名称不同的表。如果用户试图重新创建一个已经存在但为空的表,HasRow的可能在理论上是一个问题?看起来使用读卡器可能是我想做的正确方向上的一步,但我如何在c中对其进行语法分析,以读取表是否存在的查询,给定一个sqliteconnection和一个表名?您认为需要询问一个用户表以查看是否已创建了一个特定的用户表。