OleDbConnection su sql server

mercoledì 11 giugno 2008 - 11.11

ajeje75 Profilo | Newbie

ciao a tutti
ho la neccessità di spostare il mio database da access a sql server, ma trovandomi già in una fase avanzata, non vorrei dover utilizzare la classe per sql server.
Ho quindi cambiato la stringa di connessione e continuato ad usare oledb.
Provider=sqloledb;Data Source=localhost;Initial Catalog=db;User ID=user;Password=pdw

la connessione sembra andar bene ma quando vado ad eseguire una query parametrica mi da l'errore "dichiarare la variabile scalare @utente"

questo è il codice:

Dim database As New clsDatabase
Dim ecoConn As New OleDbConnection
Dim reader As OleDbDataReader = Nothing
Dim parametri As New OleDbCommand

Dim sql As String

sql = "SELECT utenti.id_utente as idUtente, utenti.mail, utenti.password, Utenti_Ruoli.ruolo "
sql &= "FROM Utenti INNER JOIN "
sql &= "Utenti_Ruoli ON Utenti.id_utente = Utenti_Ruoli.id_utente "
sql &= "WHERE utenti.id_utente=@utente AND utenti.password=@password"


Try
ecoConn = database.openConn()

parametri.CommandText = sql
parametri.Connection = ecoConn

parametri.Parameters.AddWithValue("@utente", utente)
parametri.Parameters.AddWithValue("@password", password)

reader = parametri.ExecuteReader()
....
....

l'errore viene dato sull'execute.

Con access e stesso codice funzionava tutto peerfettamente

0v3rCl0ck Profilo | Guru

>ciao a tutti

Ciao

>ho la neccessità di spostare il mio database da access a sql
>server, ma trovandomi già in una fase avanzata, non vorrei dover
>utilizzare la classe per sql server.
>Ho quindi cambiato la stringa di connessione e continuato ad
>usare oledb.

Immagino tu non abbia utilizzato un DAL (data access layer)

>Provider=sqloledb;Data Source=localhost;Initial Catalog=db;User
>ID=user;Password=pdw
>
>la connessione sembra andar bene ma quando vado ad eseguire una
>query parametrica mi da l'errore "dichiarare la variabile scalare
>@utente"
>
>questo è il codice:
>
> Dim database As New clsDatabase
> Dim ecoConn As New OleDbConnection
> Dim reader As OleDbDataReader = Nothing
> Dim parametri As New OleDbCommand
>
> Dim sql As String
>
>sql = "SELECT utenti.id_utente as idUtente, utenti.mail, utenti.password,
>Utenti_Ruoli.ruolo "
> sql &= "FROM Utenti INNER JOIN "
>sql &= "Utenti_Ruoli ON Utenti.id_utente = Utenti_Ruoli.id_utente
>"
>sql &= "WHERE utenti.id_utente=@utente AND utenti.password=@password"
>
>
> Try
> ecoConn = database.openConn()
>
> parametri.CommandText = sql
> parametri.Connection = ecoConn
>
>parametri.Parameters.AddWithValue("@utente", utente)
>parametri.Parameters.AddWithValue("@password", password)

Prova a dichiarare i parametri mettendo esplicitamente anche il tipo dato:

Dim ParamUtente As New OleDb.OleDbParameter("@utente", OleDb.OleDbType.VarChar) Dim ParamPassword As New OleDb.OleDbParameter("@password", OleDb.OleDbType.VarChar) ParamUtente.Value = utente ParamPassword.Value = password parametri.Parameters..Parameters.Add(ParamUtente) parametri.Parameters..Parameters.Add(ParamPassword)

>
> reader = parametri.ExecuteReader()
> ....
> ....
>
>l'errore viene dato sull'execute.
>
>Con access e stesso codice funzionava tutto peerfettamente

Fammi sapere

- Michael -
http://blogs.dotnethell.it/Regulator/

0v3rCl0ck Profilo | Guru

> Dim sql As String
>
>sql = "SELECT utenti.id_utente as idUtente, utenti.mail, utenti.password,
>Utenti_Ruoli.ruolo "
> sql &= "FROM Utenti INNER JOIN "
>sql &= "Utenti_Ruoli ON Utenti.id_utente = Utenti_Ruoli.id_utente
>"
>sql &= "WHERE utenti.id_utente=@utente AND utenti.password=@password"

Se la soluzione di prima non funziona, prova anche a sostituire i placeholder @utente e @password, con dei punti interrogativi ? perchè forse il provider sqloledb non riconosce i placeholder posizionali, quando si effettuano query parametriche. Ricorda che utilizzando i placeholder '?' i parametri devono essere aggiunti nello stesso ordine dei parametri specificati nella query.


- Michael -
http://blogs.dotnethell.it/Regulator/

ajeje75 Profilo | Newbie

si pare funzionare con i ? stile java
ma a questo punto mi sa che faccio prima a cambiare tutti gli oledb in sqlclient visto che il codice è pieno di query parametriche

0v3rCl0ck Profilo | Guru

>si pare funzionare con i ? stile java
>ma a questo punto mi sa che faccio prima a cambiare tutti gli
>oledb in sqlclient visto che il codice è pieno di query parametriche

Io ti consiglio di crearti un DAL (Data Access Layer), in rete trovi informazioni utili, anche su questo stesso forum se cerchi DAL o Data Access Layer troverai qualche post interessante. Poi ti suggerisco questo articolo: http://community.codesmithtools.com/blogs/tutorials/archive/2006/02/13/nettiers.aspx

Ciao

- Michael -
http://blogs.dotnethell.it/Regulator/
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5