c# exécuter la SqlCommand avec les Paramètres “à l'aide de” bloc de code
Je suis de la tentative d'exécution d'une Commande SQL par le biais d'une 'aide' bloc de code, mais ne semble pas possible de l'obtenir pour fonctionner avec des Paramètres. J'obtiens l'erreur: "Paramètres" n'existe pas dans le contexte actuel", quelqu'un aurait-il une solution pour ce problème? Voilà Mon code:
DataTable dt = new DataTable();
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (var cmd = new SqlCommand(" SELECT FName" +
" FROM EmployeeTable " +
" WHERE EmployeeId = @empId",
con)
{
Parameters.Add(new SqlParameter("@empId",empId))
})
{
try
{
con.open();
dt.Load(cmd.ExecuteReader());
}
catch(Exception ex)
{
//(snip) Log Exceptions
}
}
return dt;
- Je ne journal de l'exception dans mon code, mais je ne savais pas que l'extrait de code pour le problème à la main donc je n'ai pas pris la peine de le mettre dans
Vous devez vous connecter pour publier un commentaire.
N'utilisez pas de constructeur d'initialisation pour cela.
Aussi pourquoi êtes-vous attraper toutes les exceptions et les jeter à la poubelle, c'est une horrible chose. Si vous avez une exception, vous pensez qu'il va être commun d'abord voir si vous pouvez restructurer le code pour vérifier la pour les valeurs d'entrée qui serait la cause et de ne pas l'avoir jeté à tous (peut-être même jeter un
ArgumentException
de votre propre), et si vous ne pouvez pas faire cela, alors la vérification de cette exception spécifique, pas tous les possible.catch(SqlException ex)
et de mettre enthrow new NotImplmentedException("Error logging not added", ex);
dans le corps. De cette façon, si l'exception ne se produisent et que vous oubliez de mettre à jour votre code, vous pouvez toujours être informé qu'il s'est passé.//(Snip) log the execption
à votre question si vous êtes à l'enregistrement de l'erreur ou que vous obtiendrez tout le monde sauter vers le haut et vers le bas sur vous pour jeter vos exception. Cette erreur est courante dans de nouveaux programmres de sorte que beaucoup de gens sortent de la façon de briser cette mauvaise habitude avant qu'il ne commence si ils le voient. En montrant que vous ne journalisation, mais ne l'inclut pas dans la question, les gens ne seront pas pris la peine de vous en parler (je recommande le montage de votre question initiale trop)Il est impossible d'utiliser l'objet de l'initialiseur pour autre chose que de l'affectation de propriété, de sorte que vous devez réécrire ton code comme ceci (seule partie ici):
Collection.Add
- pas.Votre seconde à l'aide de déclaration se ferme avant le try catch.
Donc une fois que le try catch est atteint à l'aide du bloc a déjà été fermé. Les paramètres sont donc dans le champ d'application incorrecte.