无法创建没有列错误的表Xamarin SQLite

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法创建没有列错误的表Xamarin SQLite相关的知识,希望对你有一定的参考价值。

我正在尝试在Xamarin应用程序中使用本地SQLite数据库,我一直在关注本教程:https://docs.microsoft.com/en-us/xamarin/get-started/tutorials/local-database/?tabs=vswin

加载我正在对其进行测试的ListView页面时,总是会收到错误:System.AggregateException:'发生了一个或多个错误。 (无法创建没有列的表(“ TestApp1.Piece”是否具有公共属性?))

这里是适用的代码:

Piece.cs

namespace TestApp1

    public class Piece
    
        [PrimaryKey, AutoIncrement]
        public int ID  get; set; 
        public int PartNum  get; set; 
        public string Catagory  get; set; 
        public string Url  get; set; 
    

PieceDatabase.cs

namespace TestApp1

    public class PieceDatabase
    
        readonly SQLiteAsyncConnection _database;

        public PieceDatabase(string dbPath)
        
            _database = new SQLiteAsyncConnection(dbPath);
            _database.CreateTableAsync<Piece>().Wait();
        

        public Task<List<Piece>> GetPieceAsync()
        
            return _database.Table<Piece>().ToListAsync();
        

        public Task<int> SavePieceAsync(Piece temp)
        
            return _database.InsertAsync(temp);
        
    

App.xaml.cs

namespace TestApp1

    public partial class App : Application
    

        static PieceDatabase database;

        public static PieceDatabase PieceDatabase
        
            get
            
                if (database == null)
                
                    database = new PieceDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "pieces.db3"));
                
                return database;
            
        

        public App()
        
            InitializeComponent();
            MainPage = new NavigationPage(new Page1());
        

        protected override void OnStart()
        
            // Handle when your app starts
        

        protected override void OnSleep()
        
            // Handle when your app sleeps
        

        protected override void OnResume()
        
            // Handle when your app resumes
        
    

DatabaseTest.xaml.cs

namespace TestApp1

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class DatabaseTest : ContentPage
    

        protected override async void OnAppearing()
        
            base.OnAppearing();

            /** The error does not occur if I add a piece here, but I'm trying to figure out why that is
            await App.PieceDatabase.SavePieceAsync(new Piece
            
                Catagory = "Beams",
                PartNum = 1,
                Url = "whatever.com"
            ); */

            List<Piece> test = await App.PieceDatabase.GetPieceAsync();
            listView.ItemsSource = test;
        

        public DatabaseTest()
        
            InitializeComponent();

        

        async void Handle_ItemTapped(object sender, ItemTappedEventArgs e)
        
            if (e.Item == null)
                return;

            await DisplayAlert("Item Tapped", "An item was tapped.", "OK");

            //Deselect Item
            ((ListView)sender).SelectedItem = null;
        
    

DatabaseTest.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="TestApp1.DatabaseTest">
    <StackLayout Margin="20,35,20,20">
        <ListView x:Name="listView">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextCell Text="Binding PartNum"
                              Detail="Binding Url"
                              />
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>
    </StackLayout>
</ContentPage>

这是我第一次与Xamarin合作,因此感谢您的帮助或解释。

答案

[我做了一个有关从sqlite数据库加载数据的示例,您是从github下载的,没有问题,我使用sqlite-net-pcl 1.6.258-beta版本和xamarin.forms 3.4版本。

https://github.com/CherryBu/Sqlite-Listview

您还可以浏览以下有关详细信息的文章:

https://www.c-sharpcorner.com/article/xamarin-forms-sqlite-database-crud-operations2/

以上是关于无法创建没有列错误的表Xamarin SQLite的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Sqlite(有时)在更新后获取错误结果

在 Xamarin 中使用带有 SQLite 的类中的 CreateTable 时,有没有一种方法可以为该类中的表使用不同的名称?

创建具有自动增量的表

android.database.sqlite.SQLiteException:没有这样的表:

Netbeans 连接到 SQLite 时出现 SQLite 错误或缺少数据库(没有这样的表)

Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常