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

C# 如果他们想收到电子邮件,请从db中选择这些电子邮件,c#,sql,winforms,sql-server-2014-express,C#,Sql,Winforms,Sql Server 2014 Express,我正在开发一个严重依赖电子邮件的系统,我试图确定用户是否希望得到通知 用户详细信息存储在SQL Server Express中。我想检查哪些注册用户希望从数据库接收电子邮件。这可能吗 到目前为止,我已经做到了: using (SqlCommand command = new SqlCommand()) { command.Connection = connection; command.CommandType = CommandType.Text; command.Com

我正在开发一个严重依赖电子邮件的系统,我试图确定用户是否希望得到通知

用户详细信息存储在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。在这里,我想保存那些在db中有10.000个首选项的人的电子邮件地址,以便我可以将其添加到电子邮件列表中

总结一下:检查所有行中是否有“是”,并从同一行保存他们的“电子邮件”

有人能给我指一下正确的方向吗?多谢各位


更新了@SeM
ExecuteNonQuery
返回仅影响
Update
Insert
Delete
语句的行数。在您的情况下,您将始终获得get
-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;   
    }
} 

如上所述,ExecuteOnQuery只执行此操作-没有查询结果

相反:

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

ExecuteNonQuery
不是这里要调用的编写工具。
ExecuteNonQuery
返回受影响的行数。为了好奇,不要编写
try{}catch{}最后{}
(在您的例子中),只需使用
using(SqlConnection connection=new SqlConnection(yourConnectionString)){}
,很抱歉,如果这超出了范围,为什么要使用价格栏来确定某人是否希望接收电子邮件?这不是布尔字段的工作吗?不,这只是一个例子,这些字段不是英文的,所以我把它们改为price,但是如果你问的是这个,它们是数值@此外,您还应该使用(…){…}块将
SqlCommand
放入
中,实际上,…'command.ExecuteScalar'出现错误:无法从'System.Data.SqlClient.SqlConnection'转换为'string'。我做错什么了吗?@C.S.我已经为@SeM更新了你的
更新了它,请检查一下。
int recordsAffected = (int)command.ExecuteScalar();