Привет, у меня есть проблема с моим сценарием на C#, в основном он должен запускаться через массив списка, а затем обновлять значения в базе данных sqlite, но он, кажется, блокируется при попытке обновить базу данных, это мой кодSQLite Блокировка базы данных Mutli Query
using UnityEngine;
using System.Collections;
using Parse;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Mono.Data.Sqlite;
using System.Data;
using System.Threading.Tasks;
public class MyTestArray : MonoBehaviour {
public int MyInt;
// Use this for initialization
void Start() {
int[] pets = { 1, 2, 3, 4, 5 };
// ... Loop with the foreach keyword.
foreach (int value in pets) {
Debug.Log (value);
MyInt = value;
string sqlQuery;
string conn = "";
#if UNITY_EDITOR
conn = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_IPHONE
conn = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_STANDALONE_WIN
conn = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_ANDROID
conn = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#endif
IDbConnection dbconn;
dbconn = (IDbConnection)new SqliteConnection (conn);
dbconn.Open(); //Open connection to the database.
IDbCommand dbcmd = dbconn.CreateCommand();
PlayerPrefs.SetString ("Question", "1");
sqlQuery = "select SUM(qo.Score) from [Answer] as a inner join Questionas qo on a.Question= qo.QuestionI inner join Question as q on qo.QuestionId = q.QuestionId where q.QID=" + value;
dbcmd.CommandText = sqlQuery;
IDataReader reader = dbcmd.ExecuteReader();
while (reader.Read()) {
int RiskNumber = reader.GetInt32 (0);
Debug.Log (RiskNumber);
string sqlQuery2 = "";
string conn2 = "";
#if UNITY_EDITOR
conn2 = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_IPHONE
conn2 = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_STANDALONE_WIN
conn2 = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#elif UNITY_ANDROID
conn2 = "URI=file:" + Application.persistentDataPath + "/" + "DB.db";
#endif
IDbConnection dbconn2;
dbconn2 = (IDbConnection)new SqliteConnection (conn2);
dbconn2.Open(); //Open connection to the database.
IDbCommand dbcmd2 = dbconn2.CreateCommand();
if (MyInt == 1){
sqlQuery2 = "UPDATE UserScore SET MyScore1="+RiskNumber;
} else if (MyInt == 2){
sqlQuery2 = "UPDATE UserScore SET MyScore2="+RiskNumber;
} else if (MyInt == 3){
sqlQuery2 = "UPDATE UserScore SET MyScore3="+RiskNumber;
} else if (MyInt == 4){
sqlQuery2 = "UPDATE UserScore SET MyScore4="+RiskNumber;
} else if (MyInt == 5){
sqlQuery2 = "UPDATE UserScore SET MyScore5="+RiskNumber;
}
Debug.Log (sqlQuery2);
dbcmd2.CommandText = sqlQuery2;
IDataReader reader2 = dbcmd2.ExecuteReader();
reader2.Close();
reader2 = null;
dbcmd2.Dispose();
dbcmd2 = null;
dbconn2.Close();
dbconn2 = null;
}
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbconn.Close();
dbconn = null;
}
}
}
ли способ я создаю запрос или я что-то пропустил любая помощь будет фантастическим веселит
Почему у вас есть открытие соединения в цикле? Вам нужно открыть соединение с базой данных только один раз. Перед тем, как открыть другую, вам придется удалить существующее соединение. –
Не могли бы вы показать мне, что я могу извлечь из своего кода, чтобы он работал лучше? Если бы вы могли это быть фантастическим, я думаю, что это просто соединение, но есть больше, что я мог бы удалить. Приветствия – albaslayer
У вас есть принятый ответ. Поэтому я надеюсь, что ваша проблема решена. Но все же, если я получу некоторое время, я добавлю ответ с оптимизированным кодом. –