C#MySQL登录无法正确验证凭据

时间:2019-03-23 08:48:48

标签: c# mysql sql winforms

您好,我试图创建将UserID保存为Userdetails类的登录表单。但是由于某种原因,登录无法正常工作。我认为if (login.Read())的{​​{1}}中存在某个错误,但不确定。如果我将消息框放到validate_login上不起作用,这就是为什么我在if (r.valid)中的某个地方思考。任何形式的帮助都将受到欢迎。谢谢。

我尝试重写mysql查询(if (login.Read())) 如果删除 cmd.CommandText = ,则会收到此错误System.NullReferenceException:'对象引用未设置为对象的实例。'

r为空。

if (r != null)

private void db_connection() { try { conn = "..connection string.."; connect = new MySqlConnection(conn); connect.Open(); } catch (MySqlException e) { throw; } } private LoginUser validate_login(string user, string pass) { db_connection(); MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "Select * from table2 where username=@user and password=@pass"; cmd.Parameters.AddWithValue("@user", user); cmd.Parameters.AddWithValue("@pass", pass); cmd.Connection = connect; LoginUser usr = null; MySqlDataReader login = cmd.ExecuteReader(); if (login.Read()) { usr = new LoginUser(); usr.UserID = login["UserID"].ToString(); usr.valid = true; } return usr; } private void button1_Click(object sender, EventArgs e) { { string user = username.Text; string pass = password.Text; var r = validate_login(user, pass); if (r != null) { if (r.valid) { MessageBox.Show("validated"); MySqlCommand cmd = new MySqlCommand(); MySqlDataReader reader = cmd.ExecuteReader(); Console.WriteLine(String.Format("{0}", r.UserID)); UserDetails.m_gnUserId = Convert.ToInt32(r.UserID); } } } } 的工作方式如下:validate_login应该运行查询并搜索与文本框validate_login@user相同的用户名和密码。 @pass应该以{{1​​}}开始 注意:我知道我需要对数据库中的密码进行哈希处理,而我目前不需要。这是我的下一步。

1 个答案:

答案 0 :(得分:0)

您的问题可能是因为如果数据库中没有这样的记录,您将返回null。

create procedure store_validated_sku_id
("variable_sku_id" VARCHAR2)
as
BEGIN

SELECT vsku.SKU_ID INTO  store_validated_sku_id.variable_sku_id 
FROM vs_sku_discont_details_test discontd,vsx_dcs_sku vsku,auto_ship_view bcc 
where discontd.sku_id = vsku.JDA_SKU_ID 
  and bcc.sku_id = vsku.SKU_ID AND vsku.web_eligible = 1 
  and vsku.discontinued =0 and bcc.auto_ship_eligible is null;

END store_validated_sku_id;

/

如果这不是您想要的,则应返回有效字段设置为false的新LoginUser。

Error(5,1): PL/SQL: SQL Statement ignored
Error(5,49): PLS-00302: component 'VARIABLE_SKU_ID' must be declared
Error(5,65): PL/SQL: ORA-00904: : invalid identifier

请不要忘记在按钮的事件处理程序中进行检查。