Erreur C # «Tous les chemins de code ne renvoient pas de valeur»

J’ai traduit cette partie du code de vb en c # et m’a transmis ce message d’erreur. “Tous les chemins de code ne renvoient pas de valeur”. Quel est le problème? Merci d’avance.

public DataSet LoadSearchDataSet(ssortingng strConnection, ssortingng strSQL) { //The purpose of this function is to create and populate a data //set based on a SQL statement passed in to the function. try { DataSet dsData = new DataSet(); //call the table in the local dataset "results" since the values //may be coming from multiple tables. ssortingng strTableName = "Results"; bool blnRunStoredProc = false; dsData = PopulateDataSetTable(strConnection, strTableName, strSQL, blnRunStoredProc, dsData); WriteSampleDataToOutputWindow(dsData); //return the data set to the calling procedure return dsData; } catch { //error handling goes here UnhandledExceptionHandler(); } } 

Si une exception se produit dans votre bloc try avant l’instruction return , la catch est exécutée et ne renvoie rien car vous ne l’avez pas signalée.

Vous pouvez faire l’une de celles-ci:

  • Renvoie une valeur du bloc catch . Ne le faites que si cela a du sens et que vous avez une valeur raisonnable que vous pouvez retourner. Sachez que renvoyer null est une source habituelle de bogues et qu’il existe des modèles pour éviter cela.
  • Relancez l’exception qui s’est produite, si vous ne pouvez rien faire à ce sujet (et renvoyez un object qui a du sens). Vous pouvez le faire en ajoutant une ligne qui dit: throw;
  • Lance une erreur différente – Vous pouvez conditionner l’exception d’origine dans une nouvelle, en fournissant des détails supplémentaires sur le contexte, si nécessaire.

Il vous manque la valeur de retour dans le cas où le code lève une exception.

 public DataSet LoadSearchDataSet(ssortingng strConnection, ssortingng strSQL) { //The purpose of this function is to create and populate a data //set based on a SQL statement passed in to the function. DataSet dsData = new DataSet(); try { //call the table in the local dataset "results" since the values //may be coming from multiple tables. ssortingng strTableName = "Results"; bool blnRunStoredProc = false; dsData = PopulateDataSetTable(strConnection, strTableName, strSQL, blnRunStoredProc, dsData); WriteSampleDataToOutputWindow(dsData); } catch { //error handling goes here UnhandledExceptionHandler(); } //return the data set to the calling procedure return dsData; } 

Vous devez append une déclaration de retour après votre clause catch!

En cas d’exception dans votre clause try catch, vous ne retournerez pas de valeur. Et c’est exactement ce que votre erreur indique.

Il s’agit d’un message d’erreur courant dans les fonctions, car celles-ci sont conçues pour renvoyer une valeur. Si votre code passe la section catch, il atteindra la fin de la fonction sans rien retourner, c’est là que vous devez renvoyer la valeur.

réécrire comme ceci:

  DataSet dsData = null; try { //call the table in the local dataset "results" since the values //may be coming from multiple tables. ssortingng strTableName = "Results"; bool blnRunStoredProc = false; dsData = PopulateDataSetTable(strConnection, strTableName, strSQL, blnRunStoredProc, dsData); WriteSampleDataToOutputWindow(dsData); } catch { //error handling goes here UnhandledExceptionHandler(); } //return the data set to the calling procedure return dsData; 

Vous pouvez résoudre ce problème en:

  1. change la fonction retourne à NUL (si vous ne retournez pas quelque chose)
  2. donne le mot-clé return avec le nom de la variable avant la fin de la fonction

En effet, dans le cas où une exception se produirait, l’exception serait renvoyée à la capture, dans ce cas le code ne renverrait aucune valeur. vous devez donc renvoyer une valeur de la capture pour éviter ce problème

Remplacez la capture par ceci:

  catch { //error handling goes here UnhandledExceptionHandler(); return new DataSet(); } 

Il est impératif de retourner la valeur appropriée dans tous les cas. alors essayez de maintenir try catch block avec la valeur de retour ou en dehors du bloc try / catch si rien à retourner dans le bloc try / catch.