C# 如何从sqlite数据库中删除Xamarin中的表

C# 如何从sqlite数据库中删除Xamarin中的表,c#,android,visual-studio,sqlite,xamarin,C#,Android,Visual Studio,Sqlite,Xamarin,我无法使用命令db.DropTable从XAMARIN中的sqLite数据库中完全删除表。它一开始会被删除,但每次重新启动应用程序时都会再次出现。另外,我有多个同名的表,我需要将它们全部删除。我该怎么办 我正在Visual Studio中使用XAMARIN和C开发一个android应用程序 不幸的是,我创建了许多同名的表。现在我需要放下它们 我使用以下代码创建表和数据库:- namespace Test { [Table("OrderDetails")] public class OrderDe

我无法使用命令db.DropTable从XAMARIN中的sqLite数据库中完全删除表。它一开始会被删除,但每次重新启动应用程序时都会再次出现。另外,我有多个同名的表,我需要将它们全部删除。我该怎么办

我正在Visual Studio中使用XAMARIN和C开发一个android应用程序

不幸的是,我创建了许多同名的表。现在我需要放下它们

我使用以下代码创建表和数据库:-

namespace Test
{
[Table("OrderDetails")]
public class OrderDetails
{
    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }
    [MaxLength(50)]
    public string payeename { get; set; }
    [MaxLength(100)]
    public string commodity { get; set; }

    public int give { get; set; }

    public int take { get; set; }
    public DateTime date { get; set; }
}

[Activity(Label = "Test", MainLauncher = true)]
public class MainActivity : Activity
{

    [Table("Items")]
    public class PayeeMaster
    {
        [PrimaryKey, AutoIncrement, Column("_id")]
        public int Id { get; set; }
        [MaxLength(8)]
        public string FirstName { get; set; }
        [MaxLength(8)]
        public string LastName { get; set; }
    }
    SQLiteConnection db;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        CreateDatabase();



    }


   public bool ifExists_Table(string tablename)
    {



        SQLiteCommand command = db.CreateCommand("SELECT COUNT(1) FROM SQLITE_MASTER WHERE TYPE = @TYPE AND NAME = @NAME");
        command.Bind("@TYPE", "table");
        command.Bind("@NAME", tablename);

        int result = command.ExecuteQuery<int>();
        return (result > 0);


    }

  public void CreateDatabase() {
     try
     {  
            string dbPath = Path.Combine(

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
            "Master.db3");

            db = new SQLiteConnection(dbPath);

        }
        catch (IOException ex)
        {
            var reason = string.Format("The database failed to create - 
     reason {0}", ex.Message);

        }



            if (!ifExists_Table("PayeeMaster"))
            {

                db.CreateTable<PayeeMaster>();
            }

            else
            {
                var count = db.Table<PayeeMaster>().Count();

            }



        if (!ifExists_Table("OrderDetails"))
            {

                db.CreateTable<OrderDetails>();
            }

            else {
                var count = db.Table<OrderDetails>().Count();
            }


     }
 }

我终于明白这个问题了,抱歉搞混了

首先,doing Table.Count实际上并不检查表是否存在,而是检查表是否包含任何行

要实际检查表是否存在,必须执行实际的SQL查询:

private bool DoesTableExist(string name)
{
    SQLiteCommand command = _connection.CreateCommand("SELECT COUNT(1) FROM SQLITE_MASTER WHERE TYPE = @TYPE AND NAME = @NAME");
    command.Bind("@TYPE", "table");
    command.Bind("@NAME", name);

    int result = command.ExecuteScalar<int>();
    return (result > 0);
}

你能发布一些你如何使用数据库的源代码吗?您不可能在第一次连接之后创建表吗?或者这些表是如何首先存在的?我已经添加了我的代码。请检查您在运行时删除了哪些表?在代码中,您显然是在启动时创建PayeMaster表删除相同的表,即PayeMaster为相同的表添加了代码。但它在重新启动应用程序后再次出现,因为您正在再次创建它:-D!请参见-if db.Table.Count==0 db.CreateTable;⬅️⬅️⬅️当数据库中的表仍然存在时,我得到的结果值为零。是否缺少任何内容?这真的很奇怪:-O!你能把sqlite数据库和两个相同的表上传到某个地方吗?我真的很想看看问题出在哪里,isI更喜欢sqlite文件本身,你能把它发布到什么地方吗?我在哪里可以找到那个sqlite文件?是否有一个标准的存储路径