请提供帮助。我正在努力学习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