Sqlite数据库文件被锁定数据库被锁定

时间:2019-03-26 12:32:49

标签: c sqlite unity3d

我不断地写一个错误,数据库被锁定。我只是不明白为什么会这样。 db_login.cs

private db_controller _dbctrl = new db_controller();
    public SqliteDataReader dataread;
    private string query;

//this two inputField, 
 public void LoginToGo()
    {
        login = _login.captionText.text;
        pass = _pass.text.ToString();
        query = "SELECT id from users where users = '" + login + "' AND pass = '" + pass + "'";
        try
        {
            dataread = _dbctrl.ExecuteReader(query);
            if(dataread.HasRows & dataread != null)
            {
                while (dataread.Read())
                {
                    VerifyAdmin();
                    _dbctrl.Disconnect();
                } 
            }
            else
            {
                errortxt.text = "Неверный логин или пароль, пожалуйста повторите!";
            }
        }
        catch (Exception ex) { errortxt.text = ex.ToString(); }
    }

 public void VerifyAdmin() //Who are you, admin or user
    {
        login = _login.captionText.text;


        query_access = "SELECT root from users where users = '" + login + "'";
        try
        {
            dataread = _dbctrl.ExecuteReader(query_access);
              while (dataread.Read())
               {
                if(dataread[0].ToString() == "0" || dataread[0].ToString() == null)
                {
                    MainMenu();

                }
                else
                    {
                    AdminMenu();

                }
               }

        }
        catch (Exception ex) { errortxt.text = ex.ToString(); }
    }

    public void AdminMenu()
    {
        JOIN.SetActive(false);
        ADMIN.SetActive(true);
    }
    public void MainMenu()
    {
        JOIN.SetActive(false);
        MAIN.SetActive(true);
    }

db_controller.cs

public SqliteConnection con_db;
    public SqliteCommand cmd_db;
    public SqliteDataReader rdr_db;


public void connections()
    {

        try
        {

            if(Application.platform != RuntimePlatform.Android)
            {
                path = Application.dataPath + "/StreamingAssets/db.bytes"; // Путь для Windows
            }
            else
            {
                path = Application.persistentDataPath + "/db.bytes"; // Путь для Android
                if(!File.Exists(path))
                {

                     WWW load = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "db.bytes");
                     while (!load.isDone) { }
                     File.WriteAllBytes(path, load.bytes);
                }
            }

        con_db = new SqliteConnection("URI=file:" + path);
        con_db.Open();
        if (con_db.State == ConnectionState.Open)
            {

                debugText.text = path.ToString() + " - is connected";
                Debug.Log(path.ToString());

            }

        }
        catch (Exception ex)
        {
            debugText.text = ex.ToString();
        }
    }

//Тут я создаю метод отключения
 public void Disconnect()
    {

        con_db.Close();
    }

 public SqliteDataReader ExecuteReader(string query)
    {
        connections();
        try
        {
            cmd_db = new SqliteCommand(query, con_db);
            rdr_db = cmd_db.ExecuteReader();
            return rdr_db;
        }
        catch (Exception ex) { debugText.text = ex.ToString(); return null; }
    }

//Тут я записываю данные. Заодно решил проверить закрыто ли соединение.

 public void SetDB()
    {

        if (con_db.State == ConnectionState.Open)
        {
            Debug.Log("open");
        }
        else
        {
            Debug.Log("close!");
        }
//The connection is closed. But I can not complete the request cmd_db.ExecuteNonQuery();
        connections();
        try
        {
            brand = AutoName.captionText.text;
            model = AutoModel.captionText.text;
            years = OldAuto.captionText.text;
            number = GosNumber.text.ToString();
            nusers = UserName.text.ToString();
            dbirthday = DBirthday.captionText.text;
            mbirthday = MBirthday.captionText.text;
            ybirthday = YBirthday.captionText.text;
            mobile = Mobile.text.ToString();
            cmd_db = new SqliteCommand("INSERT INTO clients(brand,model,years,number,nusers,dbirthday,mbirthday,ybirthday,mobile,groupmodel) values('" + brand + "', '" + model + "','" + years + "','" + number + "','" + nusers + "','" + dbirthday + "','" + mbirthday + "','" + ybirthday + "','" + mobile + "','" +groupmodel+ "')" , con_db);
            cmd_db.ExecuteNonQuery(); //Swears, says that the base is locked. And why? I just read the data and the connection was closed.

        }
        catch (Exception ex)  { debugText.text = ex.ToString(); }
        Disconnect();
    }

文档说: 当您尝试从同一连接到数据库同时对数据库执行两项不兼容的操作时,会发生此错误代码。

但是与底座的连接已关闭。 也许我缺少了一些东西,或者没有做正确的事。我需要帮助来澄清这个问题。

0 个答案:

没有答案