簡體   English   中英

system.reflection.targetinvocationException SQLite

[英]system.reflection.targetinvocationexception SQLite

我在C#項目中使用ORM來管理SQLite數據庫。 就是這樣: https : //github.com/praeclarum/sqlite-net

確實很希望,但是我不能使用SELECT Query。 當我運行這個:

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;
        }

    }
}

令人遺憾的是,無論OOP有多好,SQLite的WP實現都不總是按預期的方式工作,通常您最好自己編寫SQL查詢。

話雖如此,您是否正確設置了屬性? 在您的數據庫中,您具有字段Owner而不是OwnerId ,因此您需要將屬性[Column(Name="Owner")]分配給OwnerId屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM