#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 в конце