Автоматическая инструкция if с условием последовательности в sql

#c# #sql #database #uwp

#c# #sql #База данных #uwp

Вопрос:

У меня есть база данных «undangundang.db». Я хочу, чтобы имя файла содержало слово 2019, тогда folder_id = 2, если 2018, то folder_id = 3 и так далее (последовательно с 2019 по 1945 год с folder_id 2-76).

Как мне это проверить, например, у меня есть имя файла: UU № 01-го 2016 — Penjaminan , тогда folder_id = 5?

Код:

 SQLiteConnection objConnUpdate = new SQLiteConnection("uuthemis.db");
    var increment = 1;

                    var currentFile = 2019;
                        var currentFolder = 2;
                        var minFile = 1945;

                        while (minFile <= currentFile)
                        {
                            currentFile -= increment;
                            currentFolder  = increment;
                        }
                        if(currentFile <= minFile)
                        {
                            string update = @"INSERT INTO undangundang (uu_id, folder_id, identifier, filename, folder_parent_id) SELECT null, "   currentFolder   ",'"   itemDetail.Judul.Split('-')[0].TrimEnd()   "',"  
                    "'"   itemDetail.File   "',2 WHERE not exists (select uu_id and folder_id and identifier and filename and folder_parent_id FROM undangundang where uu_id=null and folder_id="   currentFolder  
                    " and identifier='"   itemDetail.Judul.Split('-')[0].TrimEnd()   "' and filename ='"   itemDetail.File   "' and folder_parent_id=2)";
                    var updateQuery = objConnUpdate.Prepare(update);
                            var updateQuery = objConnUpdate.Prepare(update);
                            updateQuery.Step();
                        }
  

У меня проблема, которая всегда заключается в вводе folder_id = 77. Как с этим справиться?

Комментарии:

1. Это потому, что var increment = 1; var currentFile = 2019; var currentFolder = 2; var minFile = 1945; while (minFile <= currentFile) { currentFile -= increment; currentFolder = increment; } равно var currentFile = 1944; var currentFolder = 77;

2. как проверить, равен ли 2016 currentfolder = 5?

3. Ваш вопрос в целом неясен. Во-первых, что вы подразумеваете под «если файл содержит слово 2019» ? Вы имеете в виду, «если имя файла содержит слово 2019″ (например, «uuthemis_2019.db» или «u2019uthemis.db»)? Или, может быть, вы имеете в виду «если путь к файлу содержит word 2019″ (например, «C:Temp2019uuthemis.db «)?

4. я имею в виду имя файла. Например: UU № 01-го 2016 — Penjaminan

5. почему 2019 = 2, 2015 = 3, вы имеете в виду, что идентификатор папки увеличивается на 1 каждые 4 года?

Ответ №1:

Ваша проблема в том, что ваш цикл:

 var increment = 1;
var currentFile = 2019;
var currentFolder = 2;
var minFile = 1945;

while (minFile <= currentFile)
{
    currentFile -= increment;
    currentFolder  = increment;
}
  

просто выполняется итерация currentFile с 2019 по 1944 год и ничего не проверяет (однако в комментариях вы отметили, что вы проверяете itemDetail.Judul.Contains(currentFolder.ToString()) )

Один из способов найти folderId заключается в следующем:

 var filename = "UU No 01 Th 2016 - Penjaminan";
var folderId = 2;

// note: <folderId> = 2021 - <year>
//       <year>     = 2021 - <folderId>
while (!filename.Contains($"{2021 - folderId}") amp;amp; folderId < 76)
    folderId  ;

// your SQL INSERT magic goes here
  

Комментарии:

1. Я пробовал это, но есть проблема, а именно: если year = 2015 (или отличный от 2016), то folder_id = 3 (он должен меняться в зависимости от года). Например, year = 2015, folder_id = 4 и т.д.

2. Я имею в виду, что если вы используете код, несмотря на то, что год = 2015, то идентификатор папки остается равным 3 и не изменится.

3. @Rose, еще одно изменение

4. Это работает, и у меня есть еще одна проблема: если я выбираю более 1 элемента, то оператор sql, который можно ввести, является только первым выбранным элементом. Как с этим справиться?

5. @Rose, это другой вопрос, но вкратце: вам нужно обернуть свой код в другой цикл и сгенерировать SQL INSERT в конце