如果他们想要收到电子邮件,请从db中选择这些电子邮件

时间:2016-05-16 10:42:25

标签: c# sql winforms sql-server-2014-express

我正在开发一个严重依赖电子邮件的系统,我正在尝试确定用户是否想要收到通知。

用户详细信息存储在SQL Server Express中。我想检查哪些注册用户想要接收并从数据库中获取他们的电子邮件。这可能吗?

到目前为止,我到目前为止:

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();
    }
}

它返回-1,但我有一行10.000。从这里开始,我想从数据库中保存那些拥有10.000首选项的人的电子邮件地址,这样我就可以将其添加到电子邮件列表中。

总结一下:如果其中一些行有“是”,请检查所有行,并从同一行保存“电子邮件”。

有人能指出我正确的方向吗?谢谢。

更新了@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;   
        }
    }
}

2 个答案:

答案 0 :(得分:2)

ExecuteNonQuery返回仅影响UpdateInsertDelete语句的行数。在您的情况下,您将始终获得-1,因为在Select语句ExecuteNonQuery上返回-1

所以试试这个:

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;   
    }
} 

答案 1 :(得分:0)

如上所述,ExecuteNonQuery就是这样做的 - 没有查询结果。

相反:

int recordsAffected = (int)command.ExecuteScalar();