存储&在 Xamarin 中检索 SQLite 数据库中的数组 [英] Store & retrieve array in SQLite database in Xamarin

查看:33
本文介绍了存储&在 Xamarin 中检索 SQLite 数据库中的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的 Xamarin 应用程序的 SQLite 数据库中存储和检索数组.我正在关注这个 Xamarin 教程在 SQLite 上.

I wanted to store and retrieve an array in a SQLite database in my Xamarin App. I'm following this Xamarin Tutorial on SQLite.

这些值将显示在选择器中.我之前使用 Models 存储数组,然后获取值并在 Picker 中列出它,它工作正常,但唯一的问题是它没有永久存储(通过关闭应用程序数组列表变空).

These values will be then show in Picker. I used Models earlier to store array and then get the values and list it in Picker, it was working fine, but the only problem was that it wasn't stored permanently (by closing app array list get empty).

银行

using SQLite;

namespace Mobile.App
{
    public class Banks
    {
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public string Name { get; set; }
        public string Number { get; set; }
    }
}

Database.cs

public class Database
{
    readonly SQLiteAsyncConnection _database;

    public Database(string dbPath)
    {
        _database = new SQLiteAsyncConnection(dbPath);
        _database.CreateTableAsync<SQLiteBank>().Wait();
    }

    public Task<List<Banks>> GetBanksAsync(string name)
    {
        return _database.Table<Banks>().ToListAsync();
    }

    public Task<int> SaveBanksAsync(Banks bank)
    {
        return _database.InsertAsync(bank);
    }
}

ViewModel.cs

在数据库中存储和检索数组列表.尝试将数组保存到数据库中时,出现错误:

Store and retrieve the array list in the database. When trying to save the array into the database, I get an error:

不能将类型 'string[]' 隐式转换为 'string'

Cannot implicitly convert type 'string[]' to 'string'

尝试从数据库中检索数组时,出现错误:

When trying to retrieve the array from the database, I get an error:

无法从System.Collections.Generic.List"转换到字符串"

Cannot convert from 'System.Collections.Generic.List<Mobile.App.Banks>' to 'string'

// Array of Bank Name and Number

string[] Name = new string[] { "Bank 1", "Bank 2", "Bank 3" };
string[] Number = new string[] { "000000", "111111", "222222" };

// Save it in database

await App.Database.SaveBanksAsync(new Banks
{
Name = Name, // Cannot implicity convert typer 'string[]' to 'string'
Number = Number // // Cannot implicity convert typer 'string[]' to 'string'
});

var bankName = await App.Database.GetBanksAsync(Name);

_bankList.Add(bankName); // Cannot convert from 'System.Collections.Generic.List<Mobile.App.Banks>' to 'string'

然后在Picker

private ObservableCollection<string> _bankList = new ObservableCollection<string>();
public ObservableCollection<string> BankList
{
    get
    {
        return _bankList;
    }
    set
    {
        this.RaiseAndSetIfChanged(ref _bankList, value);
    }
}

<Picker 
    x:Name="picker_bank" 
    Title="Select Bank"
    ItemsSource="{Binding BankList}"
    SelectedItem="{Binding SelectedBank}">
</Picker>

推荐答案

而不是这样做

string[] Name = new string[] { "Bank 1", "Bank 2", "Bank 3" };
string[] Number = new string[] { "000000", "111111", "222222" };

试试这个

List<Banks> banks = new List<Banks>();

// repeat for each bank
banks.Add(new Banks { Name = "Bank1", Number = "00000" });

然后你可以将它们保存到你的数据库

then you can save them to your db

foreach(var bank in banks)
{
    await App.Database.SaveBanksAsync(bank);
}

接下来,这不起作用

var bankName = await App.Database.GetBanksAsync(Name);

因为GetBanksAsync 返回所有 银行,而不仅仅是一家银行的名称.

because GetBanksAsync returns all banks, not just the name of one bank.

BankList 应该是 ObservableCollection,而不是 string.那么你可以这样做

BankList should be an ObservableCollection<Banks>, not string. Then you can do this

// load all banks into a list
var banks = await App.Database.GetBanksAsync();
// create an observablecollection from that list
BankList = new ObservableCollection<Banks>(banks);

这篇关于存储&amp;在 Xamarin 中检索 SQLite 数据库中的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆