我正在开发一个严重依赖电子邮件的系统,我正在尝试确定用户是否想要收到通知。
用户详细信息存储在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首选项的人的电子邮件地址,这样我就可以将其添加到电子邮件列表中。
总结一下:如果其中一些行有“是”,请检查所有行,并从同一行保存“电子邮件”。
有人能指出我正确的方向吗?谢谢。
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;
}
}
}
答案 0 :(得分:2)
ExecuteNonQuery
返回仅影响Update
,Insert
和Delete
语句的行数。在您的情况下,您将始终获得-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();