UWP - вставка данных с сервера (json) в базу данных при определенных условиях - PullRequest
0 голосов
/ 05 июня 2018

У меня есть приложение, которое проверяет данные на сервере (json) и в базе данных.Я хочу, чтобы, когда идентификатор на json не совпадал с идентификатором в базе данных, он вставляет все данные с неравным идентификатором в базу данных.Код:

var sqlpath = System.IO.Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "ebookstore.db");
            this.DataContextChanged += (s, e1) => { UpdateViewModel = DataContext as ViewModels.UpdateViewModel; };
            string idDb = @"SELECT id FROM books where parent_folder_id = 2 and title like '%guru%'";

            var IDdb = objConnUpdate.Prepare(idDb);
            IDdb.Step();
            iddb = IDdb[0].ToString();
            IDDB = Convert.ToInt32(iddb.ToString());
            ConnectionProfile connections = NetworkInformation.GetInternetConnectionProfile();
            {
                            try
                            {
                                Downloading.IsOpen = true;
                                string urlPath1 = "https://.../fetch/k13G";
                                var httpClient1 = new HttpClient(new HttpClientHandler());
                                httpClient1.DefaultRequestHeaders.TryAddWithoutValidation("KIAT-API-KEY", "...*");
                                var values1 = new List<KeyValuePair<string, string>>
                            {
                                new KeyValuePair<string, string>("halaman", "1"),
                                new KeyValuePair<string, string>("limit", "20"),
                            };

                                var response1 = await httpClient1.PostAsync(urlPath1, new FormUrlEncodedContent(values1));
                                response1.EnsureSuccessStatusCode();

                                string jsonText1 = await response1.Content.ReadAsStringAsync();
                                JsonObject jsonObject1 = JsonObject.Parse(jsonText1);
                                JsonArray jsonData1 = jsonObject1["data"].GetArray();

                                foreach (JsonValue groupValue in jsonData1)
                                {
                                    JsonObject groupObject = groupValue.GetObject();

                                    string ID = groupObject["id"].GetString();

                                    BukuUpdate file1 = new BukuUpdate();
                                    file1.ID = ID;
                                    int intID = Convert.ToInt32(file1.ID);

                                    if (intID != IDDB)
                                    {

                                                string jumlahidDb = @"SELECT COUNT(id) FROM books where parent_folder_id = 2 and id > " + IDDB + " and title like '%guru%'";

                                                var jumlahIdDB = objConnUpdate.Prepare(jumlahidDb);
                                                jumlahIdDB.Step();
                                                if (jumlahiddb < jumlahbuku)
                                                {;
                                                    if (nama == "Kelas_01_SD_")
                                                    {
                                                        DownloadBukuK2013G(url);
                                                        string K2013GUpdate = @"INSERT INTO books (id,title,folder_id,identifier,parent_folder_id) SELECT " + intID + ",'" + namaFile + ".pdf',34,'" + namaFile +
                                                        ".pdf',2 WHERE not exists (select id AND title AND folder_id AND identifier AND parent_folder_id FROM books WHERE id=" + intID + " and title='" + namaFile +
                                                        ".pdf' AND folder_id=34 and identifier='" + namaFile + ".pdf' and parent_folder_id=2)";
                                                        var K2013GQuery = objConnUpdate.Prepare(K2013GUpdate);
                                                        K2013GQuery.Step();
                                                    }

BukuUpdate.cs:

public class BukuUpdate
{
        public string ID { get; set; }
}

База данных: database stucture

Мне не удалось его реализовать.Как справиться с этим?

1 Ответ

0 голосов
/ 13 июня 2018

Но если я использую код в моем предыдущем посте, он показывает только первый идентификатор в базе данных

Вы получаете первый идентификатор по этой строке кода iddb = IDdb[0].ToString(); для использования.На самом деле список id сохраняется в переменной idDb.

Я хочу, если идентификатор на json не совпадает с идентификатором в базе данных, тогда данные будут добавлены в базу данных,Если то же самое, то ничего не делать.

Для этого вы можете просто получить все id из базы данных и сравнить с новой записью о доходах от Json одну за другой.Из вашего фрагмента кода я не уверен, какой пакет Nuget вы используете для Sqlite, но новейшее официальное руководство использует пакет Microsoft.Data.SQLite.Я также настоятельно рекомендую вам использовать пакет Microsoft.Data.SQLite, следуя официальному руководству .Таким образом, пример кода вставки может выглядеть следующим образом:

public sealed partial class MainPage : Page
{ 
    private void btngettest_Click(object sender, RoutedEventArgs e)
    {
        List<String> ids = sqlhelp.GetData();
        string idfromjson = "2";
        foreach (string id in ids)
        {
            if (id != idfromjson)
            {
                //do insert operation
            }
            else
            {
                //do nothing
            }
        } 
    } 
}

public class sqlhelp
{
    public static void InitializeDatabase()
    {
       ... 
    }

    public static List<String> GetData()
    {
        List<String> entries = new List<string>();

        using (SqliteConnection db =
            new SqliteConnection("Filename=sqliteSample.db"))
        {
            db.Open();
            SqliteCommand selectCommand = new SqliteCommand
                ("SELECT id from MyTable", db);
            SqliteDataReader query = selectCommand.ExecuteReader();
            while (query.Read())
            {
                entries.Add(query.GetString(0));
            }
            db.Close();
        }
        return entries;
    }

Поскольку ваш фрагмент кода содержит много вашей собственной логики, я не внес изменений в ваш исходный фрагмент кода.Пожалуйста, дайте ссылку на мой простой код, который может быть более понятным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...