Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C检查.sqlite文件中是否存在表#_C#_Sqlite - Fatal编程技术网

C# 如何使用C检查.sqlite文件中是否存在表#

C# 如何使用C检查.sqlite文件中是否存在表#,c#,sqlite,C#,Sqlite,我正在创建一个WPF程序,用户可以在其中创建存储在.sqlite数据库中的产品列表。每个产品列表在数据库中都有自己的表,用户可以选择谁的名字。当我尝试创建表时,我需要弄清楚表是否已经存在,以便如果已经存在,我可以要求用户选择其他名称 我知道 SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}'; 查询是否用于检查表是否存在,但如何使用c#以布尔形式获取此语句 我会假设类似于 SQLiteConnect

我正在创建一个WPF程序,用户可以在其中创建存储在.sqlite数据库中的产品列表。每个产品列表在数据库中都有自己的表,用户可以选择谁的名字。当我尝试创建表时,我需要弄清楚表是否已经存在,以便如果已经存在,我可以要求用户选择其他名称

我知道

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和一个表名?您认为需要询问一个用户表以查看是否已创建了一个特定的用户表。