DataReader永远不会进入Read()

时间:2015-01-30 21:50:43

标签: c# wpf sqlite prism datareader

使用Prism 5(如果这很重要),我试图将一个表读入一个类但是当我运行该程序时,SQLiteDataReader Read()从未被执行(或者我认为因为它的断点永远不会被命中)。

在我的解决方案中,我有一个带有ViewModel类的ModuleA,其中的方法将更新视图中的Bindings:

    public void ShowGeneral()
    {
        Personnel personnel = new Personnel();
        personnel = PersonnelDAL.GetPersonnelRecord(Human);
        pName = personnel.PersonName + " Esquire";
        pAge = personnel.PersonAge;
    }

PersonnelDAL.GetPersonnelRecord()位于单独的模块中。 (本模块引用了SQLite)。

public static Personnel GetPersonnelRecord(int id)
    {
        SQLiteConnection myDBconnection = new SQLiteConnection(SQLiteDAL.dbConnectionString);
        Personnel personnel = new Personnel();

        try
        {
            myDBconnection.Open();
            string strQuery = "SELECT Person.*, Personnel.*," +
                " FROM Person, Personnel WHERE Person.PersonPersonnelID = Personnel.PersonnelID AND Person.PersonID = @PersonID";
            SQLiteCommand query = new SQLiteCommand(strQuery, myDBconnection);
            query.Parameters.Add(new SQLiteParameter("@PersonID") { Value = id });
            // A Breakpoint set here is hit
            SQLiteDataReader myReader = query.ExecuteReader();

            // A Breakpoint set here is never hit
            while (myReader.Read())
            {
                personnel.PersonID = myReader.GetInt32(0);
                personnel.PersonName = myReader.GetInt32(1);
                personnel.PersonAge = myReader.GetInt32(3);

                // etc

因此,View不显示Age的值,只显示Esquire的名称。

为什么myreader.Read()从未执行过?

1 个答案:

答案 0 :(得分:1)

您的查询在FROM子句前面有一个错误的逗号:

string strQuery = "SELECT Person.*, Personnel.*," +
            " FROM Person, Personnel WHERE ...";

你没有发布整个代码片段,但我猜你正在吞下这个例外。我不会这样做。