我有3行SQLite db,当我从行中删除数据时,数据将丢失,但行仍将,我如何删除该空白行?



我有xamarin应用程序,我使用SQLite保存数据,如果我有3行并删除第二行,那么数据将被删除,但行将是空白的,它仍然在这里,问题是,我需要从每行加载一列。我使用循环和计数来设置它的最大值。但是count说我有两行,所以对于循环加载,只有第一行,而不是第二行,因为第二行在第三行,第二行是空白的。我需要删除空白行或发现另一个解决方案如何加载它。如何删除空白数据库?计数algorythm:

public int GetNumberPhotos()
{            
var db = new SQLiteConnection(_dbPath);
db.CreateTable<Airplane>();
int count = 0;
if (db.Table<Airplane>().FirstOrDefault(l => l.Id == 1) != null)
count = db.Table<Airplane>().Count();

return count;
}

加载:

public int BetterUniReg()
{
int numberPhotos = GetNumberPhotos();
string[] allReg = new string[numberPhotos];
string[] uniReg = new string[numberPhotos];
int uniRegCnt = 0;
var db = new SQLiteConnection(_dbPath);
//db fill
for (int i = 0; i <= numberPhotos; i++)
{
if (db.Table<Airplane>().FirstOrDefault(b => b.Id == i) != null)
{
var rowData = db.Table<Airplane>().FirstOrDefault(c => c.Id == i);                    
i--;
allReg[i] = rowData.Registration;
i++;
}                
}

下面是删除代码:

private async void deleteButton_Clicked(object sender, EventArgs e)
{
var action = await DisplayAlert("Delete", "Do you want delete picture?", "Cancel", "Delete");
if (action)
{                
}   
else
{
var butto = sender as Button;
var frame = butto.Parent.Parent.Parent.Parent as Frame;
await frame.FadeTo(0, 600);
var button = (Button)sender;                
var plane = (Airplane)button.BindingContext;                
var db = new SQLiteConnection(_dbPath);
db.Delete<Airplane>(plane.Id);
Refresh();
}
}

我通过添加最后一行和空行来完成遍历,然后再做一个循环。下面是代码:

for (int i = 1; i <= numberPhotos; i++)
{
if (db.Table<Airplane>().FirstOrDefault(c => c.Id == i) != null)
{
var rowData = db.Table<Airplane>().FirstOrDefault(c => c.Id == i);
allReg[regnumber] = rowData.Registration;
regnumber++;
}
if (db.Table<Airplane>().FirstOrDefault(c => c.Id == i) == null && i == numberPhotos)
{
numberPhotos = numberPhotos + 1;
}
}

最新更新