Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Visual Studio C# rimozione record con apostrofo dal DataGridView.
Forum - C# / VB.NET - Visual Studio C# rimozione record con apostrofo dal DataGridView.

Avatar
pacifico (Normal User)
Rookie


Messaggi: 34
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 9:23
Venerdì, 29/01/2021
Gent.mi,

in un programma in Mdf, ho inserito tramite le TextBox in DataGridView dei record aventi l'apostrofo con il metodo: Replace("'", "''").
Regolarmente modifico e non riesco ad eliminiare tali record.
Il codice che uso per la eliminazione:

Codice sorgente - presumibilmente C# / VB.NET

  1. string Prova1Rimozione = DataGridView.Rows  [DataGridView.SelectedRows[0].Index].Cells[1].Value.ToString();
  2.   string sqlQuery = "DELETE FROM [tblDatabase] WHERE [Prova1] = '" + Prova1Rimozione + "';";
  3.   SqlCommand QueryDatabase = new SqlCommand(sqlQuery, connessioneDB);



le prove effettuate sono diversi senza ottenere un risultato e gradirei un Vostro gradito aiuto per risolvere.

Anticioatamente ringrazio e fiducioso, saluto.
Domenico.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:24
Venerdì, 29/01/2021
Per la mia esperienza, il metodo usato causa un bel pò di problemi.

In generale, per andare sul sicuro si dovrebbero eliminare record a partire da un ID o come di regola andrebbero create le tabelle. e non da un determinato tipo di valore.
Cioè puoi cercare il valore in una query e ci sta.
Ma eliminare un record partendo da un valore senza specificare un ID rischi di eliminare più record o magari un record per un'altro.


un esempio corretto è:

| ID | Nome | Congome
+---+------+-----------
|  0  | 'GG'  | Tofy
|  1  | AB    | Tofy
+----------------------


Una volta che hai trovato il record corrispondente ottieni ID di una chiave primaria
(l'ID essendo progressivo non è mai uguale) in seguito elimini il record specificando esattamente l'ID e non un valore.
Cosa accadrebbe se esempio in una tabella ci sono due record diversi ma entrambi un valore uguale in cognome?
Se fai un query di ricerca, come detto va bene.
Se invece fai un delete specificando il valore potrebbe eliminare il primo record con il valore trovato e non quello che esattamente cerchi di eliminare.


Le cause possono essere tante, tra cui nomi riservati, magari uno spazio non visibile ed altri fattori.

Se la tua tabella non ha una chiave primaria progressiva, credo si possa ancora aggiungere.
Sono un pò arrugginito sul sql che non uso da parecchio tempo. Ma la logia e questa.

Altrimenti ti consiglio di inserire un breakpoint in fase di debug e controllare esattamente cosa succede
nella variabile e se la modifica viene effettuata.

Il Metodo Replace non dovrebbe causare nessun problema, esiste proprio per quello.

Il tuo codice va benissimo, non presenta errori.
Magari il problema e proprio questo che ti ho indicato.



Ultima modifica effettuata da Thejuster il 29/01/2021 alle 14:15


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:12
Venerdì, 29/01/2021
Hai fatto questo controllo?:

string Test = "DELETE FROM [tblDatabase] WHERE [Prova1] = '" + Prova1Rimozione + "';";

e verificato che Test contenga quello che ti aspetti?

Condivido inoltre quello che dice Thejuster.

Ultima modifica effettuata da Carlo il 29/01/2021 alle 14:15


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:19
Venerdì, 29/01/2021
Devi usare i parametri per le frasi SQL

SqlParameter
https://docs.microsoft.com/it-it/dotnet/api/system.data.sql ...

e non avrai problemi del genere (né altri problemi)

Ma te l'hanno già detto ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote