Search code examples
c#sqlwinformssql-server-2014-express

Select those emails from db if they wanted to get an email


I am developing a system that heavily relies on emailing, I'm trying to determine if users wanted to get notified or not.

User details are stored in SQL Server Express. I want to check which registered users wanted to receive and get their emails from the database. Is this possible?

So far I got this far:

using (SqlCommand command = new SqlCommand())
{
    command.Connection = connection;
    command.CommandType = CommandType.Text;
    command.CommandText = "SELECT COUNT(*) FROM [UserTable] WHERE ([price] = @price)";
    command.Parameters.AddWithValue("@price", "10.000");

    try
    {
        connection.Open();
        int recordsAffected = command.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
        MessageBox.Show("Error is SQL DB: " + ex);
    }
    finally
    {
        connection.Close();
    }
}

It returns -1, but I have a 10.000 in one row. And from here I want to save the email addresses of those who has 10.000 on their preferences from the db so I can add it to email list.

So to summarize: Check all rows if some of them has 'yes' and save their 'email' from the same row.

Can someone point me to the right direction? Thank you.


Updated it for @SeM

private void getMailList()
{
    using (SqlConnection connection = new SqlConnection("Data Source=DESKTOP-9MMTAI1\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"))
    {
        try
        {
            connection.Open();
            using (SqlCommand cmd = connection.CreateCommand())
            {
                cmd.CommandText = "SELECT COUNT(*) FROM UserTable WHERE price = @price";
                cmd.Parameters.Add(new SqlParameter("@price", 10000));
                int count = int.Parse(cmd.ExecuteScalar());
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error is SQL DB: " + ex);
            //Handle your exception;   
        }
    }
}

Solution

  • ExecuteNonQuery returning the number of rows that affected only for Update, Insert and Delete statements. In your case, you will always get get -1, because on Select statement ExecuteNonQuery returning -1

    So try this:

    using(SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        {
            connection.Open();
            using(SqlCommand cmd = connection.CreateCommand())
            {
                cmd.CommandText = "SELECT COUNT(*) FROM UserTable WHERE price = @price";
                cmd.Parameters.Add(new SqlParameter("@price", 10000));
                int count = int.Parse(cmd.ExecuteScalar());         
            }
        }
        catch (Exception ex)
        {
            //Handle your exception;   
        }
    }