C# 如何从sqlite数据库中删除Xamarin中的表
我无法使用命令db.DropTable从XAMARIN中的sqLite数据库中完全删除表。它一开始会被删除,但每次重新启动应用程序时都会再次出现。另外,我有多个同名的表,我需要将它们全部删除。我该怎么办 我正在Visual Studio中使用XAMARIN和C开发一个android应用程序 不幸的是,我创建了许多同名的表。现在我需要放下它们 我使用以下代码创建表和数据库:-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
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文件?是否有一个标准的存储路径