SQLite и C# - INSERT и UPDATE с проверкой CASE - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь редактировать вставки в этой таблице, используя C# и sqlite.

Таблица SQLite:

CREATE TABLE "utenti" (
    "id"    INTEGER NOT NULL,
    "grado" TEXT,
    "cognome"   TEXT NOT NULL,
    "nome"  TEXT NOT NULL,
    "codice_fiscale"    TEXT
)

CREATE TABLE "entrate" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "id_utente" INTEGER NOT NULL,
    "nome"  TEXT NOT NULL,
    "entrata"   TEXT NOT NULL,
    "uscita"    TEXT
);

Я хотел бы убедитесь, что сначала мы go проверили, есть ли запись с «id_utente», вставленная в текстовое поле. Если он существует и значение столбца «uscita» пусто, обновите строку и добавьте значение в столбец «uscita». Если в текстовом поле нет строк с «id_utente» или они существуют, но введены значения столбцов «entrata» и «uscita», вставьте новую запись.


Тестовый код:

public static bool SavePerson(int idUtente, string nome, string orario)
        {
            using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
            {
                var output = cnn.Query($"select * from utenti where id = {idUtente}").FirstOrDefault();


                if (output != null) {
                    nome = FindCognome(idUtente);
                    string query;


                    query = $"IF NOT EXISTS(SELECT (id_utente, nome, entrata) FROM entrate WHERE id_utente = '\"{idUtente}\"')" +
                    $"BEGIN" 
                    $"INSERT INTO entrate (id_utente, nome, entrata) VALUES (\"{idUtente}\",\"{nome}\",\"{orario}\")" +
                    $"END" +
                    $"ELSE" +
                    $"BEGIN" +
                    $"UPDATE entrate (id_utente, nome, entrata) VALUES (\"{idUtente}\",\"{nome}\",\"{orario}\") WHERE id_utente = '\"{idUtente}\"')" +
                    $"END";

                    //cnn.Execute($"INSERT INTO entrate (id_utente, nome, entrata) VALUES (\"{idUtente}\",\"{nome}\",\"{orario}\")");


                    cnn.Execute(query);
                    cnn.Close();
                    return true;
                } 
                else return false;

            }
        }

Я провел различные тесты и различные попытки, но я нахожусь в затруднении для контрольной переменной строки в таблице.


ДРУГОЕ НЕПРАВИЛЬНОЕ ТЕСТ

query = $"UPDATE entrate SET uscita = \"{orario}\"," +
                        $"CASE WHEN id_utente = {idUtente}" +
                        $"ELSE INSERT INTO entrate (id_utente, nome, entrata) VALUES (\"{idUtente}\",\"{nome}\",\"{orario}\")";

1 Ответ

0 голосов
/ 17 февраля 2020

Я исправил проблему, изменив некоторые таблицы и способ их чтения

Таблица SQLite:

CREATE TABLE "utenti" (
    "id"    INTEGER NOT NULL,
    "grado" TEXT,
    "cognome"   TEXT NOT NULL,
    "nome"  TEXT NOT NULL,
    "codice_fiscale"    TEXT,
    "presente"  INTEGER
)

CREATE TABLE "entrate" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "id_utente" INTEGER NOT NULL,
    "nome"  TEXT NOT NULL,
    "entrata"   TEXT NOT NULL,
    "uscita"    TEXT
)

Код:

public static bool SavePerson(int idUtente, string nome, string orario)
{
    using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
    {
        var output = cnn.Query($"select * from utenti where id = {idUtente}").FirstOrDefault();

        if (output != null) {
            nome = FindCognome(idUtente);
            var checkpresenza = cnn.QuerySingle<int>($"select presente from utenti where id = \"{idUtente}\" limit 1");
            Console.WriteLine(checkpresenza);

            if (checkpresenza == 0)
            {
                cnn.Execute($"INSERT INTO entrate (id_utente, nome, entrata) VALUES (\"{idUtente}\",\"{nome}\",\"{orario}\")");
                cnn.Execute($"UPDATE utenti SET presente = \"1\"  WHERE id = {idUtente}");
                presenza = 0;

            }
            else if (checkpresenza == 1)
            {
                cnn.Execute($"UPDATE entrate SET uscita = \"{orario}\" where id_utente = {idUtente}");
                cnn.Execute($"UPDATE utenti SET presente = \"0\"  WHERE id = {idUtente}");
                presenza = 1;
            }

            cnn.Close();
            return true;
        } 
        else return false;

        }

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