Search code examples
c#sqlsql-serverusingsqlcommand

c# execute SqlCommand with Parameters in "using" code block


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;

Solution

  • Don't use constructor initialization for this.

    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))
    {
        cmd.Parameters.Add(new SqlParameter("@empId",empId));
        try
        {
               con.open();
               dt.Load(cmd.ExecuteReader());
        }
        catch(Exception) //BAD BAD BAD!!! Why are you doing this!
        {
        }
    }
    return dt;
    

    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.