【问题标题】:Delete and Update statements in Sqlite not workingSqlite 中的删除和更新语句不起作用
【发布时间】:2015-02-07 21:24:53
【问题描述】:

我在 windows phone 8.1 应用程序上使用 SqlitePCL, 我有查询选择和插入工作,但由于某种原因删除和更新不起作用

这是我的代码:

选择语句:

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

现在不工作的代码:

删除语句:

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

更新声明:

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

更新: windows phone 上的 sqlite Pcl 似乎不支持“update”命令,在选择或删除 WHERE 命令时只支持“WHERE id=?”而不是像“WHERE name=belal”这样的其他东西。

【问题讨论】:

  • 是否有任何参数传递给您的DELETE 语句,或任何参数5 到8 是否传递给您的UPDATE 语句,为空?
  • 不,我检查过。有什么想法吗?
  • 你的第一个错误是catch {}。永远不要那样做;它丢弃错误然后继续,好像没有出错一样。但是确实出了点问题,你扔掉了错误信息。您需要查看异常来诊断问题。

标签: c# sqlite


【解决方案1】:

您将文字文本放在插入语句中的用户名和其他变量的前面。因此,在更新或删除记录时永远找不到记录。删除插入语句绑定中变量前面的标签以使其工作:

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

【讨论】:

  • 我的问题不在于插入,而在于删除和更新。谢谢你的回答
  • 我明白了,但这些语句不起作用,因为您将标签文本放在某些字段中。 update 和 delete 语句找不到要更新的记录。例如:您将用户名存储为“用户名:Rob”,然后让您的更新语句更新所有用户名 = 'Rob' 的记录。它永远不会更新任何记录。
  • 感谢Rob的帮助,但是windows phone上的sqlite Pcl似乎不支持“update”命令,在选择或删除WHERE命令时只支持“WHERE id=?”而不是像“WHERE name=belal”这样的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多