[VB NET 2005] Eseguire StoredProcedure

mercoledì 28 ottobre 2009 - 13.31

Malkavian Profilo | Newbie

Premessa sto utilizzando le classi ODBC per lavorare su un database di Sqlserver 2005.

allora ho tentato di fare questo.
Invece di creare in maniera canonica la procedura per l'esecuzione di una stored con
parametri ho pensato di costruirmi la stringa da mandare direttamente a sql con
il comando comand.ExecuteNonQuery()
ma non succede nulla.
nello specifico cosa faccio.

Creo una stringa per l'esecuzione della stored

StrQuery = 'EXEC SP1 @NOME = 'Nome',@Cognome = 'Cognome'
associo alla comand.
Comand.commandtext = strquery
ed eseguo il comando
Comand.ExecuteNoQuery()

solo che la tabella che la stored dovrebbe popolare non cambia di un record.
Ora se lancio direttamente la strquery dal query analayzer la esegue correttamente.

Il passaggio mancante e???

Grazie per ogni risposta.

Malkav

dante Profilo | Junior Member

strQuery ha vari problemi...

StrQuery = 'EXEC SP1 @NOME = 'Nome',@Cognome = 'Cognome'

la sintassi è già il primo errore

" @NOME = 'Nome' " e " @Cognome = 'Cognome' " sono altri errori...

di sicuro non succede nulla perchè la stored va in errore

Ammetendo che la sintassi sia un errore di scrittura sul tuo post, mi spieghi perchè utilizzi delle variabili in quel modo? dove sono dichiarate?

Malkavian Profilo | Newbie

la sintassi della variabile strQuery non ha nessun errore.
@Nome e @Cognome sono i parametri che accetta la stored in Input e se la eseguo direttamente dal query Analayzer di Sql server la esegue correttamente.
se la eseguo da vb.net 2005 non fa nulla.

dante Profilo | Junior Member

Scusa se insisto ma se mandi all'interprete TSQL una striga così ti manda a quel paese...

A parte apici di troppo e/o mancanti, se @Nome è solo di input tu devi mandargli unicamente il valore(SP1 'Nome', 'Cognome'; ammesso che sia giusta la disposizione) altrimenti gli devi passare una variabile(ti ricordo che quando fai una dichiarazione Outpu in una stored, la variabile in questione è ByRef).

Saluti
Dante
Ti posso indirizzare, ma il codice te lo devi scrivere

Malkavian Profilo | Newbie

mi ripeto perché forse non sono riuscito a spiegarmi.
La sintassi della stored è corretta.
Se la lancio da sql non mi da errore e fa quello che deve fare.
Lanciarla da sql intendo che dopo averla composta nella variabile strquery e usando variabili del tipo di dato che si aspetta la stored per ogni parametro in input la stampo in un file di log.
Copio incollo la stringa in sql e la lancio e magia il mio record è scritto nella tabella.

dante Profilo | Junior Member

ok, non avendo il tuo codice improvviso...
La apri la connessione?

prova questo(l'ho scritto al volo quindi correggilo se serve):

Public Sub InviaComando(ByVal strQuery As String, ByVal strConn As String)
Using conn As New SqlConnection(strConn)
Dim Comand As New SqlCommand(strQuery, conn)
Comand.Connection.Open()
Comand.ExecuteNonQuery()
End Using
End Sub
Ti posso indirizzare, ma il codice te lo devi scrivere

Malkavian Profilo | Newbie

Ahahah no aspetta!!!
So come si apre una connessione ad un database
come si usano connection,command,adatepter,dataset e tutto il corredo.
Solo che ho provato a fare una cosa diversa e mi chiedevo perché non funzioni.

Mettiamola cosi forse è piu semplice:

Se creo una Sub che inserisce un record in una tabella


Dim con as new connection
con.connectionstring = Connectionstring
Dim comand as new command
comand.connection = cont

con.open ()
comand.commandtext = 'Insert into Tabella (nome,congome)values('nome','cognome')
comand.executenoQuery()
con.close()


ok???
Se tu prendi la stringa della commandtext e la esegui da sql inserisce un nuovo record nella tabella "tabella"

Credo che fino a qui ci siamo.

Se da SQL lancio una EXEC SP1 @NOME = 'nome',@cognome = 'cognome'
esegue correttamente la stored.

Nella stored c'e la stessa Insert che ho passsato alla comandtext.

Passaggio Finale:

Ora prendo la stored cosi come l'ho scritta in sql la inserisco nella commandtext
lancio e non fa nulla.

La domanda è perche???




tankian Profilo | Junior Member

prova ad aggiungere al command:

comand.commandtype = data.commandType.storedprocedure

Malkavian Profilo | Newbie

niente....

dante Profilo | Junior Member

scusa, ma se provi questo? cosa succede?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ti posso indirizzare, ma il codice te lo devi scrivere

Malkavian Profilo | Newbie

No aspetta ho sbagliato io una cosa...

la soluzione e il commandtype
Grazie mille.
Sei un grande.

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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5