2014-07-06 116 views
2

试图开发Windows 8.1商店应用程序。在其他困难中,我需要从where子句中使用两个参数从sqlite数据库检索记录。我可以用where子句中的一个参数成功查询,但是当我尝试使用两个参数时,它会崩溃一切。这里是我的这段代码:具有多个WHERE条件的SQLite数据库查询

public string SaveMaint(MaintViewModel Maintenance) 
    { 
     string result = string.Empty; 
     using (var db = new SQLite.SQLiteConnection(App.DBPath)) 
     { 
      string change = string.Empty; 
      try 
      { 
       var existingmaintenance = db.Query<maintenance> ("select * from maintenance where VehID = ? AND MaintID = ?", new String[] {Maintenance.Maintid, Maintenance.Vehicleid}); 
       // var existingmaintenance = (db.Table<maintenance>().Where 
       //  (c => c.MaintID == Maintenance.Maintid).SingleOrDefault()); 

       if (existingmaintenance != null) 
       { 
        existingmaintenance.VehID = Maintenance.Vehicleid; 
        existingmaintenance.MaintID = Maintenance.Maintid; 
        existingmaintenance.ServiceDate = Maintenance.Servicedate; 
        existingmaintenance.ServiceCost = Maintenance.Servicecost; 
        existingmaintenance.ServiceLocation = Maintenance.Servicelocation; 
        existingmaintenance.ServiceNote = Maintenance.Servicenote; 
        existingmaintenance.ServiceOdom = Maintenance.Serviceodom; 
        int success = db.Update(existingmaintenance); 
       } 
       else 
       { 
        int success = db.Insert(new maintenance() 
        { 
         VehID = Maintenance.Vehicleid, 
         MaintID = Maintenance.Maintid, 
         ServiceDate = Maintenance.Servicedate, 
         ServiceCost = Maintenance.Servicecost, 
         ServiceLocation = Maintenance.Servicelocation, 
         ServiceNote = Maintenance.Servicenote, 
         ServiceOdom = Maintenance.Serviceodom 
        }); 
       } 
       result = "Success"; 
      } 
      catch 
      { 
       result = "This project was not saved."; 
      } 
     } 
     return result; 
    } 

请参考其中existingmaintenance变量定义行。该行的注释版本正常工作。当我将变量定义替换为两个参数查询(由于我无法弄清楚如何将第二个参数添加到表查询方法中),它会崩溃。

感谢您提供任何帮助。对不起,我只有一半明白我在做什么。

+0

什么样的ORM您使用的是?它似乎与扩展Dapper,但我不知道。 – Steve

回答

7

INT假设你正在使用SQLite-Net作为你的ORM,你可以通过在查询后的参数。据我所知,不支持匿名类,如你的例子。试试这个:

var existingmaintenance = db.Query<maintenance>(
    "select * from maintenance where VehID = ? AND MaintID = ?", 
    Maintenance.Vehicleid, Maintenance.Maintid).FirstOrDefault(); 

您还可以使用LINQ查询,就像这样:

var existingmaintenance = db.Table<maintenance>().Where 
    (c => c.VehID == Maintenance.Vehicleid && 
    c.MaintID == Maintenance.Maintid).FirstOrDefault(); 
+0

我正在使用sqlite-net。我以为我尽了一切办法来做一个像第二个建议一样的查询,但我失败了。但你的工作就像一个魅力!非常感谢!我没有把“FirstOrDefault()”部分放在上面。我能做些什么来给你点这个吗?我只点击了复选标记。显然,我没有足够的hutspa来给你的答案投票。 – wheezer

+0

@ user3798080,接受我的答案给了我点。 upvoting也会给我点,但正如你所说,你还没有足够的“胡茨帕”。 –

0

试试这个

我希望两个编号在数据库

var existingmaintenance = db.Query<maintenance> ("select * from maintenance where VehID = " + Maintenance.Maintid + " AND MaintID = " + Maintenance.Vehicleid).FirstOrDefault(); 
+0

感谢您的建议,Ashish。 Chue回答做了诀窍,所以我不需要尝试你的。 – wheezer

+0

@ user3798080 np :) –

相关问题