Problema semplice con apici

sabato 17 giugno 2006 - 11.05

lordwaizard Profilo | Senior Member

Ho un problema con la gestione degli apici

TABELLA:
CREATE TABLE [dbo].[tabella] (
[prova] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[prova2] [text] COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


PROBLEMA
INSERT INTO tabella(prova,prova2) VALUES('ciao','ciao')
Tuttto funzione correttamente.
Se uso nel mio testo un apice:
ES.
INSERT INTO tabella(prova,prova2) VALUES('d'es','d'es')

Ovviamente non va, p Per risolverlo uso
INSERT INTO tabella(prova,prova2) VALUES("d'es","d'es")


Ora il problema che usando dba funziona correttamente se uso vb.net 2005 non funziona.

CODICE:
Dim reader As SqlDataReader
Dim myConn As SqlConnection = New SqlConnection(daticon)
Dim myCommand As SqlCommand = New SqlCommand("INSERT INTO tabella(prova,prova2) VALUES(""d'es"",""d'es""), myConn)

Try
myConn.Open()
reader = myCommand.ExecuteReader()
Catch ex As Exception
MessageBox.Show(ex.ToString())
Finally
If Not reader Is Nothing Then
reader.Close()
If (myConn.State = ConnectionState.Open) Then
myConn.Close()
End If
End If
End Try

ERRORE
System.Data.SqlClient.SqlException: Il nome 'd'es' non è consentito in questo contesto. È possibile utilizzare solo costanti, espressioni o variabili, non nomi di colonna.

Dove sbaglio?
Scusate per la domanda da ignoranti.
Grazie Davide

lbenaglia Profilo | Guru

>Se uso nel mio testo un apice:
>ES.
>INSERT INTO tabella(prova,prova2) VALUES('d'es','d'es')
>
>Ovviamente non va, p Per risolverlo uso
>INSERT INTO tabella(prova,prova2) VALUES("d'es","d'es")

Ciao Davide,

Per risolverlo non devi utilizzare i doppi apici, ma semplicemente occorre raddoppiare l'apice della stringa:

INSERT INTO tabella(prova,prova2) VALUES('d''es','d''es')

Per risolvere in modo definitivo il problema dovresti ricorrere alle stored procedure parametriche senza la necessità di raddoppiare gli apici.
Oltre a questo vantaggio, le stored procedure:

- Isolano l'applicazione dalla base dati, quindi permettono di disaccoppiare il sorgente dalla struttura del database. Se occorre effettuare modifiche al db, basterà aggiornare la stored procedure mantenendo invariata la sua interfaccia (parametri di I/O) per fare in modo che il funzionamento dell'applicazione non sia compromesso;

- Offrono performances più elevate, in quanto sono compilate la prima volta che vengono richiamate. Di conseguenza gli step di Parsing, Optimization e Compilation saranno eseguiti solo una volta;

- Possono essere utilizzate per configurare la security del database. In genere gli utenti difficilmente hanno le permission per accedere direttamente alle tabelle base, ma piuttosto si preferisce definire le regole di accesso per ogni categoria di utenti utilizzando viste, UDF e stored procedure.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

Ti ringrazio per la risposta veramente completa.
Però il problema persiste ovvero, se io inserisco la riga da dba non da errori se la inserisco da vb mi da il seguente errore:

System.Data.SqlClient.SqlException: Riga 1: sintassi non corretta in prossimità di 'ess'.
Virgoletta di chiusura mancante prima della stringa di caratteri ')'.

A differenza di prima la inserisce nel db ma non riesco a capire perchè la inserisce correttamente e mi da il messagio di errore.
Sicuramente ho sbagliato nel codice vb.

Scusa ancora
Davide

lbenaglia Profilo | Guru

>Sicuramente ho sbagliato nel codice vb.

Concordo
Se si verifica un errore di sintassi stai tranquillo che l'INSERT non andrà a buon fine.
verifica con calma il tuo codice VB.NET.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

Invece l'insert funziona ma da l'errore di sintassi.

Il codice se non utilizzo gli apici, funziona bene, non capisco più nulla.
Il codice è di due righe come vedi non c'è tanto da sbagliare...
Se vi viene in mente qualcosa...
Grazie ancora.
Davide

lbenaglia Profilo | Guru

>Il codice è di due righe come vedi non c'è tanto da sbagliare...

Bene, postalo insieme al messaggio d'errore che ricevi.

>Grazie ancora.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

E' sempre lo stesso presente nel primo post.

CODICE
CODICE:
Dim reader As SqlDataReader
Dim myConn As SqlConnection = New SqlConnection(daticon)
Dim myCommand As SqlCommand = New SqlCommand("INSERT INTO tabella(prova,prova2) VALUES(""d'es"",""d'es""), myConn)

Try
myConn.Open()
reader = myCommand.ExecuteReader()
Catch ex As Exception
MessageBox.Show(ex.ToString())
Finally
If Not reader Is Nothing Then
reader.Close()
If (myConn.State = ConnectionState.Open) Then
myConn.Close()
End If
End If
End Try


ERRORE
System.Data.SqlClient.SqlException: Riga 1: sintassi non corretta in prossimità di 'ess'.
Virgoletta di chiusura mancante prima della stringa di caratteri ')'.

lbenaglia Profilo | Guru

>Dim myCommand As SqlCommand = New SqlCommand("INSERT INTO tabella(prova,prova2)
>VALUES(""d'es"",""d'es""), myConn)

Mannaggia, cosa ho scritto poco sopra?

--> Per risolverlo non devi utilizzare i doppi apici, ma semplicemente occorre raddoppiare l'apice della stringa:
--> INSERT INTO tabella(prova,prova2) VALUES('d''es','d''es')


Quindi prova a scrivere:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

Scusa, ho sbagliato a fare il copia incolla è come hai postato tu.
Mi da l'errore però inserisce

lbenaglia Profilo | Guru

>Scusa, ho sbagliato a fare il copia incolla è come hai postato
>tu.
>Mi da l'errore però inserisce

Non so che dirti. Da qualche parte non chiudi una striga.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5