sqlite-net-pcl查询返回正确的行计数,但所有数据都为null或0



请提供帮助。我正在努力学习xamarin c-sharp。为此,我已经学习了足够多的基础知识,我有信心尝试制作一个简单的SQLite-Db应用程序。

我正在使用sqlite-net-pcl。我试过Xamarin.Android和Xamarin.Forms。我在两台不同的win10电脑上运行了这个应用程序。我已经在模拟器和手机上运行了该应用程序。结果都一样。所有返回的数据都为0或null。

我有一个现有的非空数据库(textdb.db):

我在网上搜索过,发现一些人抱怨同样的结果,但我找不到解决方案。

我希望外面有人能看到什么,告诉我出了什么问题。

结构:表:测试表。。。。。。。。。。。。。。。。。。。id,INT,主键数据,BIGINT

数据id=1数据=2………….

我的代码:

using System;
using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Views;
using AndroidX.AppCompat.Widget;
using AndroidX.AppCompat.App;
using Google.Android.Material.FloatingActionButton;
using Google.Android.Material.Snackbar;
using Android.Widget;
using System.IO;
using SQLite;
using System.Linq;
namespace android_db_app
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
. . .
}
public override bool OnCreateOptionsMenu(IMenu menu)
{
. . .
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
. . .
}
private void FabOnClick(object sender, EventArgs eventArgs)
{
. . .
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
. . .
}
public void Exit_Click(object sender, EventArgs e)
{
System.Environment.Exit(0);
}
public void Connect_Click(object sender, EventArgs e)
{
object o,o1;
string dbname = "test.db";
string s = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, @"DailyReminder/DB/" + dbname);
if (!File.Exists(s))
s = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, dbname);
SQLiteAsyncConnection dbConnection = new SQLiteAsyncConnection(s);//SQLiteConnection.Table
string sql = "SELECT * FROM testtable;";
string sql1 = "SELECT ID FROM testtable;";
o = dbConnection.Table<testtable>();
o1 =  dbConnection.QueryAsync<int>(sql1,0);
}
}
public class testtable
{
public Int32 id;
public Int64 data;
}
}

对象中的所有结果都是值0,而不是1和2。

对于我的sqlite.net,这是我的设置:

0我正在Models文件夹中创建一个类

namespace MyApp.Models
{
public class testtable
{
public int id { get; set; }
public int data {get; set; }
}
}

1内部MainActivity.cs(安卓系统(

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);

string dbName = "your_table_name.db3";
string folderPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string dbPath = Path.Combine(folderPath, dbName);
LoadApplication(new App(dbPath));
}

2内部App.xaml.cs:

public static string DatabasePath = string.Empty; //sqlite
public App(string databasePath)
{
InitializeComponent();
MainPage = new NavigationPage(new View.MainPage());
DatabasePath = databasePath; //sqlite
}

3调用数据库,例如,当页面出现时,您想调用数据库:

using MyApp.Models;
...
protected override async void OnAppearing()
{
using SQLiteConnection conn = new SQLiteConnection(App.DatabasePath);
conn.CreateTable<testtable>();
List<testtable> notes = conn.Table<testtable>().ToList();
}

试着用你的ID创建一个类,比如这个

class IdResult
{
public int ID { get; set; }
}

然后

o1 =  dbConnection.QueryAsync<IdResult>(sql1,0);

您将在IdResult.ID.中看到您的ID

最新更新