最近我开始使用Xamarin创建Android应用程序。我尝试用SQLite创建一个小型本地数据库。我使用了Xamarin documentation website中的以下教程。
不幸的是我收到了错误:
错误CS0019:操作员'!='不能应用于类型'任务'的操作数。和' int' (CS0019)
我的代码如下:
private string createDatabase(string path)
{
try
{
var connection = new SQLiteAsyncConnection(path);{
connection.CreateTableAsync<Person>();
return "Database created";
}
}
catch (SQLiteException ex)
{
return ex.Message;
}
}
private string insertUpdateData(Person data, string path)
{
try
{
var db = new SQLiteAsyncConnection(path);
if ( db.InsertAsync(data) != 0)
db.UpdateAsync(data);
return "Single data file inserted or updated";
}
catch (SQLiteException ex)
{
return ex.Message;
}
}
private int findNumberRecords(string path)
{
try
{
var db = new SQLiteConnection(path);
// this counts all records in the database, it can be slow depending on the size of the database
var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person");
// for a non-parameterless query
// var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person WHERE FirstName="Amy");
return count;
}
catch (SQLiteException ex)
{
return -1;
}
}
Person类如下:
using System;
using SQLite;
namespace HelloWorld {
public class Person
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string FullName { get; set; }
public string CarLicense { get; set; }
public override string ToString()
{
return string.Format("[Person: ID={0}, FullName={1}, CarLicense={2}]", ID, FullName, CarLicense);
}
}
}
有人可以帮我解决这个错误吗?
答案 0 :(得分:7)
答案 1 :(得分:4)
您应该等待结果,而不是使用可能导致死锁的Result
:
if (await db.InsertAsync(data) != 0)
{
await db.UpdateAsync(data);
}
这要求您的方法也是异步的,因此签名应为:
private async Task<string> insertUpdateData(...)
答案 2 :(得分:2)
这告诉您需要比较结果而不是任务。请更新此行:
if ( db.InsertAsync(data) != 0)
到
if ( db.InsertAsync(data).Result != 0)
答案 3 :(得分:2)
你可以使用async,等待你想要innsertUpdateData是异步的。
private async Task<string> insertUpdateData(Person data, string path)
{
try
{
var db = new SQLiteAsyncConnection(path);
if ( 0 != await db.InsertAsync(data))
await db.UpdateAsync(data);
return "Single data file inserted or updated";
}
catch (SQLiteException ex)
{
return ex.Message;
}
}
答案 4 :(得分:1)
您需要在db.InsertAsync(data)
上添加.result