user2580
user2580

Reputation: 25

C# - System Data SqlClient SqlException

So I am in the midst of debugging a program I have been working on quite sometime that will email the user an email that will the user an email that contains information on an error a client is having trying to get into a mobile app. The problem that I am having is even though I have set the parameter, I am getting the following error message:

The parameterized query '(@USER_NAME varchar(8000))SELECT USER_NAME, EMAIL, FIRST_NAME, L' expects the parameter '@USER_NAME', which was not supplied.

I have never encountered this error before so I am not sure if there is something I am missing in my code or if I just put in the wrong syntax. Below is both the method where the error is happening in and the class that this method uses:

Method:

private static MyHomeInformation GetUserDataFromMyHome(string username)
    {
        MyHomeInformation myHomeInformation = null;
        using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.MyHomeConnectionString))
        {
            SqlCommand sqlError = connection.CreateCommand();
            sqlError.CommandText = @"SELECT USER_NAME, EMAIL, FIRST_NAME, LAST_NAME, TRAVELER_UID FROM TANDT_PORTAL.dbo.[USER] WHERE USER_NAME = @USER_NAME";
            sqlError.Parameters.Add("@USER_NAME", System.Data.SqlDbType.VarChar);

            connection.Open();
            SqlDataReader reader = sqlError.ExecuteReader();

            if (reader.Read())
            {
                myHomeInformation = new MyHomeInformation();
                myHomeInformation.myHomeUserName = Utilities.FromDBValue<string>(reader["USER_NAME"]);
                myHomeInformation.myHomeEmail = Utilities.FromDBValue<string>(reader["EMAIL"]);
                myHomeInformation.myHomeFirstName = Utilities.FromDBValue<string>(reader["FIRST_NAME"]);
                myHomeInformation.myHomeLastName = Utilities.FromDBValue<string>(reader["LAST_NAME"]);
                myHomeInformation.myHomeTravelerUID = Utilities.FromDBValue<Guid>(reader["TRAVELER_UID"]);
            }
        }
        return myHomeInformation;
    }

Class:

class MyHomeInformation
{
    public string myHomeUserName { get; set; }
    public string myHomeEmail { get; set; }
    public string myHomeFirstName { get; set; }
    public string myHomeLastName { get; set; }
    public Guid myHomeTravelerUID { get; set; }  
}

Upvotes: 0

Views: 886

Answers (3)

dpimente
dpimente

Reputation: 527

You add your parameter to the call, but give the parameter no value.

change

sqlError.Parameters.Add("@USER_NAME", System.Data.SqlDbType.VarChar); 

to

sqlError.Parameters.Add("@USER_NAME", System.Data.SqlDbType.VarChar).value = username;

Upvotes: 1

Rikard
Rikard

Reputation: 3869

Change the sqlError.Parameters.Add to AddWithValue

private static MyHomeInformation GetUserDataFromMyHome(string username)
{
    MyHomeInformation myHomeInformation = null;
    using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.MyHomeConnectionString))
    {
        SqlCommand sqlError = connection.CreateCommand();
        sqlError.CommandText = @"SELECT USER_NAME, EMAIL, FIRST_NAME, LAST_NAME, TRAVELER_UID FROM TANDT_PORTAL.dbo.[USER] WHERE USER_NAME = @USER_NAME";
        sqlError.Parameters.AddWithValue("@USER_NAME", username); // THIS ROW SHOULD BE UPDATED

        connection.Open();
        SqlDataReader reader = sqlError.ExecuteReader();

        if (reader.Read())
        {
            myHomeInformation = new MyHomeInformation();
            myHomeInformation.myHomeUserName = Utilities.FromDBValue<string>(reader["USER_NAME"]);
            myHomeInformation.myHomeEmail = Utilities.FromDBValue<string>(reader["EMAIL"]);
            myHomeInformation.myHomeFirstName = Utilities.FromDBValue<string>(reader["FIRST_NAME"]);
            myHomeInformation.myHomeLastName = Utilities.FromDBValue<string>(reader["LAST_NAME"]);
            myHomeInformation.myHomeTravelerUID = Utilities.FromDBValue<Guid>(reader["TRAVELER_UID"]);
        }
    }
    return myHomeInformation;
}

Upvotes: 2

Hogan
Hogan

Reputation: 70523

Here is an example of the correct way to use the parameters collection add function:

SqlParameter param = new SqlParameter("@USER_NAME", SqlDbType.NVarChar, 8000);
param.Value = "Sam";
sqlError.Parameters.Add(param);

Note the setting of the value to Sam.

You could also use the function AddWithValue if you don't want to create the param variable. (However, @JoelCoehoorn will be worried about performance issues - see question comments)

Upvotes: 1

Related Questions