2015-02-07 53 views
1

我上了Windows Phone 8.1的應用程序使用SqlitePCL, 我有查詢,選擇和插入工作,但由於某種原因,刪除和更新不工作刪除和SQLite中更新語句不工作

這裏是我的代碼:

SELECT語句:

public static itemPassword[] AllGetItemPassword() 
     { 
      var db = App.conn; 
      int numbofPass = 0; 
      itemPassword[] itmpass = null; 
      try 
      { 
       using (var statement = db.Prepare("SELECT nameWeb, username, password, link FROM Passwords")) 
       { 
        while (statement.Step() == SQLiteResult.ROW) 
        { 
         numbofPass++; 
        } 
       } 
      } 
      catch 
      { 

      } 

插入語句:

public void insertToDB(String usernameWeb, String userusername, String userpassword, String userlink) 
    { 
     var db = App.conn; 

     try 
     { 
      using (var pass = db.Prepare("INSERT INTO Passwords (nameWeb, username, password, link) VALUES (?,?,?,?)")) 
      { 
       pass.Bind(1, usernameWeb); 
       pass.Bind(2, "Username: " + userusername); 
       pass.Bind(3, "Password: " + userpassword); 
       pass.Bind(4, "Link: " + userlink); 
       pass.Step(); 
      } 
     } 
     catch 
     { 
     } 

而且現在不工作代碼:

DELETE語句:

public static void DeleteRecord12(string webname, string username , string password, string link) 
     { 
      var db = App.conn; 
      try 
      { 
       using (var pass = db.Prepare("DELETE FROM Passwords WHERE webname = ? AND username = ? AND password = ? AND link = ?")) 
       { 
        pass.Bind(1, webname); 
        pass.Bind(2, username); 
        pass.Bind(3, password); 
        pass.Bind(4, link); 
        pass.Step(); 
       } 
      } 
      catch (Exception ex) 
      { 
       ex.GetType(); 
      } 
     } 

Update語句:

public void UpdateRecord(string webname, string username, string password, string link,string Newwebname, string Newusername, string Newpassword, string Newlink) 
     { 
      var db = App.conn; 
      try 
      { 
       using (var pass = db.Prepare("UPDATE Passwords SET webname = ?, username = ?, password = ?, link = ? WHERE webname = ? AND username = ? AND password = ? AND link = ?")) 
       { 
        pass.Bind(1, Newwebname); 
        pass.Bind(2, Newusername); 
        pass.Bind(3, Newpassword); 
        pass.Bind(4, Newlink); 
        pass.Bind(5, webname); 
        pass.Bind(6, username); 
        pass.Bind(7, password); 
        pass.Bind(8, link); 
        pass.Step(); 
       } 
      } 
      catch (Exception ex) 
      { 
       ex.GetType(); 
      } 
     } 

UPDATE: 看來,Windows Phone上的sqlite的PCL不支持命令「更新」,並且選擇或刪除WHERE命令時只支持「WHERE id =?」而不是像「WHERE name = belal」之類的東西。

+0

5到8傳遞給你的'UPDATE傳遞給你的'DELETE'聲明任何參數,或任何的參數'聲明,null? – 2015-02-07 21:50:21

+0

不,我檢查。有什麼想法嗎? – Belalm 2015-02-07 22:42:10

+0

你的第一個錯誤是'catch {}'。永遠不要這樣做;它丟棄錯誤然後繼續,如果沒有出錯。但有些事情出錯了,你扔掉了錯誤信息。您需要查看異常情況來診斷問題。 – 2015-02-09 19:30:39

回答

0

您正在將文字文本放在插入語句中的用戶名和其他變量前面。因此,在更新或刪除記錄時從未找到記錄。在INSERT語句的綁定變量的前面上的標籤來得到它的工作:

public void insertToDB(String usernameWeb, String userusername, String userpassword, String userlink) 
{ 
    var db = App.conn; 

    try 
    { 
     using (var pass = db.Prepare("INSERT INTO Passwords (nameWeb, username, password, link) VALUES (?,?,?,?)")) 
     { 
      pass.Bind(1, usernameWeb); 
      pass.Bind(2, userusername); 
      pass.Bind(3, userpassword); 
      pass.Bind(4, userlink); 
      pass.Step(); 
     } 
    } 
    catch 
    { 
    } 
+0

我的問題是沒有插入,它與刪除和更新。布感謝您的答案 – Belalm 2015-02-07 22:40:23

+0

我明白了,但這些陳述不起作用,因爲你在一些領域中放置標籤文本。更新和刪除語句找不到要更新的記錄。例如:您將用戶名存儲爲「用戶名:Rob」,然後讓您的更新語句更新用戶名='Rob'的所有記錄。它永遠不會更新任何記錄。 – 2015-02-08 11:59:25

+0

感謝您的幫助Rob,但是似乎windows phone上的sqlite Pcl不支持命令「update」,而選擇或刪除WHERE命令時只支持「WHERE id =?」而不是像「WHERE name = belal」之類的東西。 – Belalm 2015-02-09 18:22:35