2011-07-12 1 views
1

J'appelle une fonction GetSerialNo mais montrant une erreur comme:Impossible de convertir le type 'decimal' en 'int' implicitement. Une conversion explicite existe (vous manque un casting?)

Impossible de convertir implicitement le type « décimal » à « int ». Une conversion explicite existe (manque-t-il une distribution?).

Quelqu'un peut-il m'aider à résoudre ce problème?

Voici le code:

int slNo= GetSerailNo(keydata); 

private int GetSerailNo(String keydata) 
{ 

    SqlConnection con = new SqlConnection(@"server=Servername;database=DBNAME;uid=Username;pwd=Pwd;max pool size=250;Connect Timeout=0"); 
    con.Open(); 
    cmd = new SqlCommand("select isnull(max(slno)+1,1) from d001docs where source_keydata='" + keydata + "'", con); 
    dynamic no = cmd.ExecuteScalar(); 
    cmd.Dispose(); 
    con.Close(); 
    return no; 
} 

Merci à l'avance

+1

Pourquoi ne pas simplement copier et coller le message d'erreur? Les gens, il suffit d'utiliser copier + coller! –

+2

Pourquoi utilisez-vous 'dynamic'? – Steven

Répondre

6
cmd.ExecuteScalar() 

retourne un nombre décimal, que vous devez convertir en int avant de le retourner par exemple:

return Convert.ToInt32(no); 
+0

IMO Depuis longtemps 'ExecuteScalar' return' object' – V4Vendetta

+0

Le type de retour de la méthode est objet. Cependant, le type réel du résultat à l'exécution est, dans ce cas, un nombre décimal. – Rik

+0

En effet, il a utilisé la dynamique à cet endroit – V4Vendetta

Questions connexes