将字符串与表中的列值进行比较

时间:2015-03-08 15:58:31

标签: c# mysql

我在数据库中有一个包含电子邮件的列。我有一个方法,将电子邮件作为参数,我想将此给定参数与数据库中的所有电子邮件进行比较,以查看它是否退出。 通常我会做这样的事情,因为电子邮件在某些列表中

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 ???)
    }

我如何从这里开始?

2 个答案:

答案 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