我无法使用命令 db.DropTable<tablename>
从 XAMARIN 中的 sqlite 数据库中完全删除表.它一开始会被丢弃,但每次我重新启动应用程序时都会再次出现。我还有多个同名的表,我需要将它们全部删除。我该怎么办?
我正在使用 XAMARIN 和 C# 在 Visual Studio 中开发一个 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();
}
}
}
最佳答案
我终于明白了问题所在,抱歉给您带来了困惑。
首先 - 做 Table<T>().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);
}
关于c# - 如何从 sqlite 数据库中删除 Xamarin 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597166/