2010-08-20 35 views
4

Je reçois une SQLException "Conflit de type d'opérande: int est incompatible avec uniqueidentifier" lorsque j'essaie d'exécuter la procédure stockée ci-dessous à partir du code C#.Conflit de type d'opérande: int est incompatible avec uniqueidentifier

create proc sp_Get_Allfields_Account_Public 
@username varchar(20), 
@password varchar(20), 
@acc_num UniqueIdentifier out, 
@cust_name varchar(20) out, 
@balance float out 
as 
select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where [email protected] and [email protected] 

code C# est la suivante

cmd = new SqlCommand("sp_Get_Allfields_Account_Public", con); 
       cmd.CommandType = CommandType.StoredProcedure; 

       // Add Input Parameters 
       cmd.Parameters.AddWithValue("@username", username); 
       cmd.Parameters.AddWithValue("@password", password); 

       // Add output parameters 
       cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier); 
       cmd.Parameters["@acc_num"].Direction = ParameterDirection.Output; 

       cmd.Parameters.AddWithValue("@cust_name", SqlDbType.VarChar); 
       cmd.Parameters["@cust_name"].Direction = ParameterDirection.Output; 

       cmd.Parameters.AddWithValue("@balance", SqlDbType.Float); 
       cmd.Parameters["@balance"].Direction = ParameterDirection.Output; 

       cmd.ExecuteNonQuery(); 

Tableau définition

create table Account_Public 
(
acc_num uniqueidentifier, 
cust_name varchar(20), 
username varchar(20), 
password varchar(20), 
balance float 
) 
+0

L'erreur sur ExecuteNonQuery ou l'une des AddWithValue? –

+0

L'exception est sur ExecuteNonQuery –

+1

En aparté, ne préfixez jamais vos noms de procédure stockée avec 'sp_' - ceux-ci doivent être réservés aux procédures système. Voir http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/don-t-start-your-procedures-with-sp_ –

Répondre

9

C'est parce que vous appelez AddWithValue, puis en passant la valeur enum (qui est interprétée comme int).

cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier); 

Utilisez une méthode différente (probablement juste Add).

+0

Je pense que c'est ça. Juste repéré la partie WithValue. –

+0

Testé Ajout de la méthode mais cette fois-ci j'obtiens l'exception String [3]: la taille de la propriété Size est 0. –

+1

@Nadeem Vous devez spécifier une taille pour votre variable de sortie varchar, sinon elle vaut 0, et vous ne peut pas avoir de nvarchar (0). –

0

Cela peut sembler un peu redondant, mais êtes-vous sûr que le type de colonne de données [Account_Public].[acc_num] est en fait uniqueidentifier et pas int?

Essayez ceci:

cmd = new SqlCommand("select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where [email protected] and [email protected]", con); 
cmd.CommandType = CommandType.Text; 

avec les mêmes paramètres. Avez-vous la même erreur?

En outre, je fortement recommandons que vous spécifiez des tailles explicites sur tous les paramètres char. Ce n'est pas si important pour les paramètres d'entrée, mais c'est très important pour les paramètres de sortie.

Questions connexes