Я использую ORM для управления моей базой данных SQLite в своем проекте C#. Это все: https://github.com/praeclarum/sqlite-netsystem.reflection.targetinvocationexception SQLite
Это действительно надежный, но я не могу использовать запрос SELECT. Когда я запускаю это:
var transacts = db.Table<Transact>();
я получаю взамен это исключение: system.reflection.targetinvocationexception
на этой линии:
public void SetValue(object obj, object val)
{
_prop.SetValue(obj, val, null);
}
Полное сообщение: system.reflection.targetinvocationexception exception has been thrown by the target of an invocation
И у меня есть конструкторы:
public Transact()
: base()
{
Console.WriteLine("yo");
}
public Transact(int subCategoryIdT, string descriptionT,
DateTime dateT, double amountT, int ownerIdT)
{
db.CreateTable<Transact>();
SubCategoryId = subCategoryIdT;
Description = descriptionT;
Date = dateT;
Amount = amountT;
OwnerId = ownerIdT;
db.Insert(this);
Console.WriteLine("I'm here !! I'm " + description + ".");
}
Может лет Вы видите, где мои ошибки?
Содержание InnerException:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: Busy
at SQLite.SQLiteCommand.ExecuteNonQuery() [0x000c6] in /Users/gautier/Documents/Dev/csharp/bumget/bumget/SQLite.cs:2087
at SQLite.SQLiteConnection.Execute (System.String query, System.Object[] args) [0x00046] in /Users/gautier/Documents/Dev/csharp/bumget/bumget/SQLite.cs:627
at bumget.Transact.set_OwnerId (Int32 value) [0x0003a] in /Users/gautier/Documents/Dev/csharp/bumget/bumget/Transact.cs:49
at at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
Мой Transact класс:
using System;
using System.IO;
using SQLite;
namespace bumget
{
public class Transact
{
private int ownerId;
private int subCategoryId;
private string description;
private DateTime date;
private double amount;
private int expense;
private SQLiteConnection db = new SQLiteConnection (Path.Combine(Directory.GetCurrentDirectory(), "bumget.db3"));
public Transact() : base() {
}
public Transact (int subCategoryIdT,string descriptionT,DateTime dateT,double amountT,int ownerIdT, int expenseT)
{
db.CreateTable<Transact>();
SubCategoryId = subCategoryIdT;
Description = descriptionT;
Date = dateT;
Amount = amountT;
OwnerId = ownerIdT;
Expense = expenseT;
db.Insert (this);
Console.WriteLine("I'm here !! I'm "+description+".");
}
[PrimaryKey, AutoIncrement]
public int Id {
get;
private set;
}
public int OwnerId
{
get{
return ownerId;
}
set{
ownerId = value;
db.Execute("UPDATE Transact SET OwnerId = ? WHERE Id = ?",OwnerId,Id);
}
}
public int Expense
{
get{
return expense;
}
set{
expense = value;
db.Execute("UPDATE Transact SET Expense = ? WHERE Id = ?",Expense,Id);
}
}
public int SubCategoryId
{
get {
return subCategoryId;
}
set{
subCategoryId = value;
db.Execute("UPDATE Transact SET SubCategoryId = ? WHERE Id = ?",SubCategoryId,Id);
}
}
public string Description
{
get{
return description;
}
set{
description = value;
db.Execute("UPDATE Transact SET Description = ? WHERE Id = ?",Description,Id);
}
}
public DateTime Date
{
get{
return date;
}
set{
date = value;
db.Execute("UPDATE Transact SET Date = ? WHERE Id = ?",Date,Id);
}
}
public double Amount
{
get{
return amount;
}
set{
amount = value;
db.Execute("UPDATE Transact SET Amount = ? WHERE Id = ?",Amount,Id);
}
}
public override string ToString()
{
return "Utilisateur :" + OwnerId + ", Montant: " + Amount + "CAN$, Date: " + Date.ToString() + ", Category : " + SubCategoryId + ", Description : " + Description + ", Owner = "+OwnerId + ", expense = "+Expense;
}
}
}
Что сообщение исключения? Какие данные вы передаете методу '_prop.SetValue'? – gunr2171
@ gunr2171 Я редактировал свое сообщение, и я передаю нулевой объект + целое число (это то, что я вижу при печати obj и val) – Gautier
Если 'obj' равно null, это не сработает. Вы не можете присвоить значение свойства нулевому объекту. – gunr2171