如何检查程序运行并且用户存在?

时间:2014-03-04 11:00:39

标签: c# mysql asp.net

我有这样的程序吗?

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `check_user`(in username varchar(100), in pass varchar(5000))
BEGIN
select * from users where email=username and password = pass;
END$$
DELIMITER ;

所以我打电话给这样的程序。

MySqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "get_user";
cmd.Parameters.AddWithValue("@username", un);
cmd.Parameters.AddWithValue("@pass", Security.Encrypt(pass));
int result = cmd.ExecuteNonQuery();

它将结果显示为0.因为没有任何行受到影响。在这种情况下无法识别用户是否存在。用户是否存在或总是为0. 那么我如何才能让用户存在

1 个答案:

答案 0 :(得分:0)

不应在SELECT语句中使用ExecuteNonQuery。

ExecuteNonQuery方法用于执行“数据操作语言”。这仅在INSERT,DELETE和UPDATE中使用。

ExecuteScalar方法将在SELECT语句的第一行,第一列中返回单个值。因此,可以使用SELECT COUNT(*)..更改查询。

ExecuteReader方法将返回SELECT的结果集。当您查询一堆结果(例如表中的行等)时,将使用此方法。

使用以下命令更改您的查询:

SELECT COUNT(*) FROM users WHERE email=username AND password = pass; 

并使用ExecuteScalar()并准备好了。

或者您可以使用DataAdapter Fill:

MySqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "get_user";
cmd.Parameters.AddWithValue("@username", un);
cmd.Parameters.AddWithValue("@pass", Security.Encrypt(pass));

DataTable data = new DataTable();
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
    da.Fill(data);
}

if (data.Rows.Count > 0)
    result = Convert.ToInt32(data.Rows[0][0].ToString());

了解更多here