I am attempting to execute an SQL Command through a 'using' code block, but can't seem to get it to work with Parameters. I get the error: 'Parameters does not exist in the current context', does anyone have a possible solution for this problem? Heres My 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;
It is impossible to use object initializer for anything other than property assignment, so you should rewrite your code like this (only relevant part here):
Your second using statement closes before the try catch. Therefore once the try catch is reached the using block has already been closed. The parameters are therefore in the incorrect scope.
Don't use constructor initialization for this.
Also why are you catching all exceptions and throwing them away, this is a horrible thing to. If you have a exception you think is going to be common first see if you can refactor your code to check the for the input values that would cause it and not have it thrown at all (perhaps even throw an
ArgumentException
of your own), and if you can't do that then check for that specific exception, not every possible one.