Procedure stockée

cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007 - 13 déc. 2005 à 13:17
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007 - 14 déc. 2005 à 14:03
Bonjour a tous,
J'essaie depuis quelques temps l'asp.net et je me suis arreté au procédures stockées.

Voilà ma procédure :
CREATE PROCEDURE GetCompanyId ( @CmpName nvarchar )
AS
SELECT IdCompany
FROM Company
WHERE Name = @CmpName
GO

Ensuite, dans le code, j'essaie :

--------------------------------------------------------------------------------
Fucntion GetCompanyID(ByVal strCmpName As String)

Dim myCommand
As
New SqlCommand(
"GetCompanyId", myConnexion)
myCommand.CommandType = CommandType.StoredProcedure

Dim myCmpId
As
Integer
myCommand.Parameters.Add(
"@CmpName", SqlDbType.NVarChar).Value = strCmpName

Conn.Open()
myCmpId = myCommand.ExecuteScalar()
Conn.Close()

Return myCmpId
--------------------------------------------------------------------------------

Pour chaque Value, myCmpId renvoie 0 .

Ou me suis-je trompé?

Merci d'avance et bonne journée a Tous

ElpenS

13 réponses

cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 09:21
C'est une erreur de frappe peut-être mais ton identifiant connexion me semble différent dans la commande et dans l'OPEN

AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 09:43
Excusez-moi, c'est une erreur lors de ma part lors du message.

myConnexion.Open()
myCmpId = myCommand.ExecuteScalar()
myConnexion.Close()

Merci quand meme

ElpenS
0
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 10:36
J'ai fait un essai rapide avec mes données et j'ai eu le même problème que toi.
J'ai travaillé dessus jusqu'à arriver à un résultat
Le problème est dans la déclaration de la procédure stockée.
Si j'utilise un sql identique mais sous forme TEXT au lieu de procédure ça marche.
Je regarde encore un peu au cas où je trouverais le point précis mais déjà si ça peut t'aider.

AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 10:47
Merci de te pencher sur mon problème AC1.
Mais qu'entends-tu par SQL sous forme TEXT?

ElpenS
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 10:56
Dim strsql As String
strsql = "SELECT SIT_TITLE "
strsql += "FROM SITES " strsql +"WHERE SIT_KEY @SIT_KEY"
objConnection.ConnectionString = ConfigurationSettings.AppSettings("Connectionstring")


Dim myCommand As SqlCommand = New SqlCommand(strsql, objConnection)
myCommand.CommandType = CommandType.Text

AC1
Databases on the Web & on the LAN
0
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 11:04
Ok je l'ai.
Ca marche avec la procédure stockée.
Apparemment le problème viendrait d'une différence dans la déclaration du type de paramètres.
Dans mon cas nvarchar et varchar à tester à 3 endroits la table / la procédure / la déclaration dans le code.
Voici mon code final


Dim objConnection
As
New SqlConnection


objConnection.ConnectionString = ConfigurationSettings.AppSettings("Connectionstring")



Dim myCommand
As SqlCommand =
New SqlCommand("TEST", objConnection)


myCommand.CommandType = CommandType.StoredProcedure



Dim myCmpId
As
String



Dim myParm
As SqlParameter = myCommand.Parameters.Add("@SIT_KEY", SqlDbType.VarChar, 20)


myParm.Value = "BZ"


objConnection.Open()



Dim myreader
As SqlDataReader = myCommand.ExecuteReader



If myreader.HasRows
Then



While myreader.Read


myCmpId = myreader(0)


Response.Write(myCmpId)



End
While



End
If


objConnection.Close()

Pas le temps d'essayer avec scalar,mais déjà j'espère que ça t'aide.

AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 11:05
Mais il n'y a plus aucun interet a creer une procedure (si on peut encore parler de procedures dans ce cas )

Moi qui pensais me simplifier la vie avec des procedures, c tout le contraire

Merci

ElpenS
0
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 11:27
Dans le dernier exemple ça marche bien avec une procédure et c'est donc du gain puisqu'elle est réutilisable. Il suffit de vérifier la cohérence de tes types de variables.
Pour scalar, j'imagine que ça doit marcher aussi mais il faut creuser un peu plus.
Là dans l'exemple ça marche avec le reader.
Fais-moi savoir si ça marche avec tes paramètres.

AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 11:44
Désolé de t'annoncer cela mais cela me revoie toujours 0.
Y a quelque chose qui cloche...

Merci

'----------------------------------------------------
'Je n'avais pas vu ton mess. avant que j'envoie le mien

ElpenS
0
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 11:52
OK
as-tu bien vérifié le type de variable aux 3 endroits ?
as-tu essayé avec le reader ?
si ça ne marche pas essaye avec le sql text pour mettre le doigt sur ce qui ne marche pas.
tu reviendras après avec la stockée.
As-tu un debugger comme celui visual studio ?
Essai avec une requête texte simple paramètre écrit en dur du type sit_key='BZ' et vois si ça marche. Si oui retourne vers ta solution 1 marche à la fois, d'abord le paramètre en texte etc..

AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 11:56
J'ai rajouté la ligne :

Dim val As String = myreader.getValue(0)
--> erreur "no data is present"

Cela veut donc dire que le problème le reader n'est pas affecté par une valeur lors de l'execution :

Dim myreader As SqlDataReader = myCommand.ExecuteReader

Donc, cela me ramène a re(re)verifier l'exactitude de ma procedure stockée elle-même

Merci
ElpenS
0
cs_AC1 Messages postés 116 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 25 mars 2010
14 déc. 2005 à 12:49
Oui tavaille avec le SQL en direct du genre
strsql="select monchampretour from matable where monchampclé='monparam'"
mycommand.type=commandtype.text
avec ça ça marche à tous les coups. Sinon problème SQL.
Dès que ça marche remonte marche par marche vers ta procédure initiale
AC1
Databases on the Web & on the LAN
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
14 déc. 2005 à 14:03
J'ai peut-etre compris pourquoi cela ne fonctionne pas :
dans ma procedure, ma clause est :

...WHERE Name = @CmpName

Or, @CmpName peut prendre une valeur telle que 'Girod S.A '

------------------------------------------------------------------
J'ai essayer de changer cela sans resultat, g également changé le = en LIKE toujours sans resultat.

Pourtant, lorsque j'execute la commande pur (SELECT cmpID,....), je reçoit correctement l'Id,

Bref, un problème a devenir malade
0
Rejoignez-nous