Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Mike Tailor
Člen
Avatar
Mike Tailor:10.2.2020 16:18
Private Sub Confirm_User_Registration(CUR_upper_name As String)
   Dim CUR_Command As String
   CUR_Command = "UPDATE users SET status = 1  WHERE upper_name = '" & CUR_upper_name & "';"
   Dim CUR_Connection_String As String
   CUR_Connection_String = String.Format("Data Source = {0}", "C:\Test\Test.db")
   Using CUR_Connection As New SQLiteConnection(CUR_Connection_String)
       Dim CUR_cmd As New SQLiteCommand(CUR_Command, CUR_Connection)
       CUR_Connection.Open()
       CUR_cmd.ExecuteNonQuery()
       CUR_Connection.Close()
   End Using
End Sub

Zkusil jsem: Vůbec netuším proč to nefunguje. To upper_name je TEXT PRIMARY KEY v te tabulce users. Procedura neskončí, nějak se zacyklí sama v sobě, ale ani nevygeneruje žádný Exception. Jiné procedury s INSERT INTO... a DELETE FROM... ve zcela stejné struktuře perfektně fungují. Pomůže někdo radou? Předem díky.

Chci docílit: Aby to fungovalo?:-)

 
Odpovědět
10.2.2020 16:18
Avatar
Odpovídá na Mike Tailor
Michal Štěpánek:11.2.2020 8:23

Používej parametrizované dotazy "@promenna", aby ses vyhnul SQL injection a mrkni sem pro inspiraci...
https://www.dotnetportal.cz/…azi-VB-NET-C-

Nahoru Odpovědět
11.2.2020 8:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.2.2020 11:11

V php to resim tak, ze si necham vypisovat na obrazovku sql prikaz. Aspon pak vidim, zda mam sql prikaz dobre nebo spatne. Pokud se mi vypise chyba, tak se mi pred ni vypise sql prikaz, ktery ji zpusobil. Takze, pak vim, co mam hledat, pripadne si ten sel prikaz muzu znak po znaku zkontrolovat nebo zkopirovat do obarvovace syntaxe.
A viz M. Stepanek, lepe pouzivat parametry.

" nějak se zacyklí sama v sobě"
Ta veta nedava smysl, v kodu nevidim zadny cyklu.
Opet, v php bych to resil... tak, ze bych si nechal kazdy radek vypsat jedno cislo nebo pismeno. Pak bych videl, co se opakuje nebo, co se jeste vypise a co uz ne. V php je to prikaz echo a vypadalo by to nejak takto:

echo 1;
   Dim CUR_Command As String
echo 2;
   CUR_Command = "UPDATE users SET status = 1  WHERE upper_name = '" & CUR_upper_name & "';"
echo 3;
   Dim CUR_Connection_String As String
echo 4;
   CUR_Connection_String = String.Format("Data Source = {0}", "C:\Test\Test.db")
echo 5;
   Using CUR_Connection As New SQLiteConnection(CUR_Connection_String)
echo 6;
       Dim CUR_cmd As New SQLiteCommand(CUR_Command, CUR_Connection)
echo 7;
       CUR_Connection.Open()
echo 8;
       CUR_cmd.ExecuteNonQuery()
echo 9;
       CUR_Connection.Close()
echo 'a';
   End Using

V Js bych pouzil

el = document.getElementById('vypis');
el.innerHTML += '1'; // echo 1
// nebo
alert(1);

Ve VS jiste jde pouzit nejaky vypis nebo prepsani textoveho pole na obrazovce.
A krome toho jiste muzes vyuzit pokrocilejsi nastroje, moznost debugovani a tak.

Cili, na prvni pohled to vypada dobre. Pokud neco selze, pravdepodobne je spatne sql prikaz. Myslim, ze kdyz selze sql prikaz a aby to vypsalo chybu, je treba to zapsat trochu jinak.

google = visual studiob vb sql lite example update
https://stackoverflow.com/…-not-working

Public Sub PostedLink(ByVal id As String, ByVal link As String)
    Dim query As String = "UPDATE Table SET torf = 1, link = @link WHERE id = @id;"
    Dim affectedRows As Integer = 0
    Try
        Using con As New SQLiteConnection(connectionString)
            con.Open()
            Using cmd As New SQLiteCommand(con)
                cmd.CommandTimeout = 20
                cmd.CommandText = query
                With cmd.Parameters
                    .Add(New SQLiteParameter("@link", link))
                    .Add(New SQLiteParameter("@id", id))
                End With
                'Dim dr As SQLiteDataReader
                'dr = cmd.ExecuteReader()
                affectedRows = cmd.ExecuteNonQuery()
            End Using
            con.Close()
        End Using
    Catch ex As Exception
        AddErrors("Updating table", ex.ToString)
    End Try
End Sub
 
Nahoru Odpovědět
11.2.2020 11:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.