我在数据库中有一个包含电子邮件的列。我有一个方法,将电子邮件作为参数,我想将此给定参数与数据库中的所有电子邮件进行比较,以查看它是否退出。 通常我会做这样的事情,因为电子邮件在某些列表中
internal bool EmailAlreadyExists(string email)
{
foreach(var currentEmail in someList)
{
if(currentEmail.Equals(email) { return false; }
}
return true;
}
到目前为止我的代码看起来像这样:
internal bool EmailAlreadyExists(string email)
{
_msqlCon.Open();
_query = "SELECT email FROM RegisteredUsers";
_command = new MySqlCommand(_query, _msqlCon);
foreach(var currentEmail in ???)
}
我如何从这里开始?
答案 0 :(得分:2)
您可以使用DataReader从数据库中读取值。
var list = new List<string>();
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read())
{
list.Add(dataReader["email"].ToString());
}
dataReader.Close();
您可以直接在数据库中检查电子邮件的存在
_query = "SELECT email FROM RegisteredUsers WHERE email = @Email";
_command.Parameters.Add("@Email", SqlDbType.String);
该列表只返回与电子邮件匹配的条目。如果没有任何匹配则清空。
答案 1 :(得分:0)
我认为代码更少,行动更少;这段代码更好:
query = "SELECT email, isnull(count(email), 0) as NUM FROM RegisteredUsers GROUP BY email";
DataTable dt = new DataTable();
SqlDataAdapter sql = new SqlDataAdapter(query, connection);
sql.Fill(dt);
if (Int32.Parse(dt.Rows[0][1].ToString()) > 0)
// your email is more than one or repeated
而dt[0][0]
会返回email
。