INSERT INTO OLEDB Dove è l'errore?

lunedì 10 gennaio 2011 - 13.57
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows Vista  |  Visual Studio 2008  |  Access (.mdb)  |  Office 2003

Feroxkk Profilo | Junior Member

myconn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engeen\Desktop\2011\Gestione Allenamenti\Database\Password.mdb"
mycomm.Connection = myconn

mycomm.CommandText = "INSERT INTO Identikit" & _
"(Nome,Cognome,PosizioneSoft,Password,Account)" & _
"VALUES(" & identis.Nome & ", " & identis.Cognome & " , " & identis.Position & ", " & identis.Password & " , " & identis.username & ")"

mycomm.Parameters.AddWithValue("Nome", identis.Nome)
mycomm.Parameters.AddWithValue("Cognome", identis.Cognome)
mycomm.Parameters.AddWithValue("PosizioneSoft", identis.Position)
mycomm.Parameters.AddWithValue("Password", identis.Password)
mycomm.Parameters.AddWithValue("Account", identis.username)


myconn.Open()
mycomm.ExecuteNonQuery()
myconn.Close()

Questo è il codice .
Tutto è stato dichiarato nel modulo: identis.Nome = RecordForm.TextBox1.Text
identis.Cognome = RecordForm.TextBox2.Text
identis.Position = RecordForm.ComboBox1.Text
identis.Password = RecordForm.TextBox3.Text
identis.username = identis.Nome & identis.Cognome

L'errore è in INSERT INTO, errore di sintassi.

alx_81 Profilo | Guru

Ciao
>L'errore è in INSERT INTO, errore di sintassi.

l'errore è causato dalla mancanza di apici (') di apertura e chiusura dei campi di tipo stringa.
In generale però, la risoluzione non è metterli, ma cambiare approccio, usando le query parametriche.
Trasforma lo statement in:
mycomm.CommandText = "INSERT INTO Identikit" & _ "(Nome,Cognome,PosizioneSoft,Password,Account)" & _ "VALUES(@nome, @cognome, @position,@password , @username)"

e poi crea dei parametri con il metodo AddWithValue:

mycomm.Parameters.AddWithValue(@nome, identis.Nome)
... per tutti

ciao!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Feroxkk Profilo | Junior Member

Modificato in questo:

myconn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engeen\Desktop\2011\Gestione Allenamenti\Database\Password.mdb"
mycomm.Connection = myconn

mycomm.CommandText = "INSERT INTO Identikit" & _
"(Nome, Cognome, PosizioneSoft, Password, Account)" & _
"VALUES(@Nome, @Cognome, @Position, @Password, @username )"

mycomm.Parameters.AddWithValue("@Nome", identis.Nome)
mycomm.Parameters.AddWithValue("@Cognome", identis.Cognome)
mycomm.Parameters.AddWithValue("@Position", identis.Position)
mycomm.Parameters.AddWithValue("@Password", identis.Password)
mycomm.Parameters.AddWithValue("@username", identis.username)


myconn.Open()
mycomm.ExecuteNonQuery()
myconn.Close()

l'errore è lo stesso

alx_81 Profilo | Guru

> mycomm.CommandText = "INSERT INTO Identikit" & _
>"(Nome, Cognome, PosizioneSoft, Password, Account)" & _
>"VALUES(@Nome, @Cognome, @Position, @Password, @username )"
>
>mycomm.Parameters.AddWithValue("@Nome", identis.Nome)
>mycomm.Parameters.AddWithValue("@Cognome", identis.Cognome)
>mycomm.Parameters.AddWithValue("@Position", identis.Position)
>mycomm.Parameters.AddWithValue("@Password", identis.Password)
>mycomm.Parameters.AddWithValue("@username", identis.username)
>
>
> myconn.Open()
> mycomm.ExecuteNonQuery()
> myconn.Close()
>
>l'errore è lo stesso
uhm.. prova ad andare in debug e a vedere cosa arriva ai campi che stai per inserire.
Inoltre, circonda il campo Password con parentesi quadre, è una parola riservata. Non dà problemi ma rende l'idea:

mycomm.CommandText = "INSERT INTO Identikit" & _ "(Nome, Cognome, PosizioneSoft, [Password], Account) " & _ "VALUES(@Nome, @Cognome, @Position, @Password, @username )"

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Feroxkk Profilo | Junior Member

Era proprio il password fra parentesi quadre.

alx_81 Profilo | Guru

>Era proprio il password fra parentesi quadre.
meglio così, comunque cerca di evitare la concatenazione delle stringhe sql. Sei esposto ad attacchi di tipo sql injection.
Se vuoi dai un'occhiata a questo mio articolo sull'argomento:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

se la risposta ti è stata di aiuto, accettala così chiudiamo il thread
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Feroxkk Profilo | Junior Member

L'ho accettata, ora non so perchè, ho incontrato un errore:
Il Campo account prende il valore della PosizioneSoft o identis.position.
Il Campo Password il cognome
Il CAMPO pOSIZIONE IL NOME.
cOMUNQUE SI PER QUELLO è RISOLTO e ho accettato la risposta.

alx_81 Profilo | Guru

>L'ho accettata, ora non so perchè, ho incontrato un errore:
se la insert è scritta come dicevamo, mi sembra molto strano. Sono posizionali..
controlla che arrivi nell'oggetto il valore che ti aspetti per ogni sua proprietà in debug..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Feroxkk Profilo | Junior Member

Debug.Print("Nome:" & " " & identis.Nome & " " & identis.Cognome & " " & "Posizione:" & " " & identis.Position & " " & "Pass:" & " " & identis.Password & " " & "Account:" & " " & identis.username)

Intendi questo??
E restituisce perfettamente quello che deve essere.

Feroxkk Profilo | Junior Member

ERRORE MIO:
Nel programma prima fa delle analisi in un datagrid e c'è il parametro:
myconn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engeen\Desktop\2011\Gestione Allenamenti\Database\Password.mdb"
mycomm.Connection = myconn
mycomm.CommandText = "SELECT ID , Nome , Cognome FROM Identikit WHERE Nome = " & identis.Nome & " and Cognome = " & identis.Cognome & ""
mycomm.Parameters.Add("Nome", OleDbType.Char, 15).Value = RecordForm.TextBox1.Text
mycomm.Parameters.Add("Cognome", OleDbType.Char, 15).Value = RecordForm.TextBox2.Text


prima di riutilizzare il mycomm.parameter devo aggiungere:
mycomm.Parameters.Clear()

Così da liberare i primi 2 spazzi di ricerca nome e cognome.
Lasciandoli prendeva nome e cognome di questa ricerca poin subito nome cognome e posizione così da scombinare.

alx_81 Profilo | Guru

>Così da liberare i primi 2 spazzi di ricerca nome e cognome.
>Lasciandoli prendeva nome e cognome di questa ricerca poin subito
>nome cognome e posizione così da scombinare.
ehehe senza conoscere la select era dura, ottimo!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5