问题描述
请帮忙。 我正在尝试学习 xamarin c-sharp。为此,我已经学习了足够的基础知识,让我有信心尝试制作一个简单的 sqlite Db 应用程序。
我正在使用 sqlite-net-pcl。我尝试过 Xamarin.Android 和 Xamarin.Forms。我已经在两台不同的 win10 计算机上运行了该应用程序。我已经在模拟器和手机上运行了该应用程序。所有的结果都是一样的。 . .所有返回的数据为 0 或 null。
我在网上搜索,发现有几个人抱怨相同的结果,但我找不到解决方案。
我希望外面的人会看到一些东西并告诉我哪里出了问题。
结构: 表:测试表 …………………… id,INT,主键 数据,BIGINT
数据 编号 = 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 (Android) 中
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();
}