首页 文章

登录错误“无法将隐式void转换为字符串”

提问于
浏览
0

我有一个包含以下代码的登录页面:

程序:

ALTER PROCEDURE [dbo].[Login_Validation]

@email varchar(100),
@password varchar(50)

AS
BEGIN

DECLARE @cnt INTEGER
SET @cnt = (SELECT COUNT(*) FROM SUBSCRIBER_MASTER WHERE EmailId=@email AND [Password]=@password AND [Status]='Y')

END

类文件:

public void Login_Validation(string email, string password)
{

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
try
{
    LocalConnection_Class(con);
    SqlCommand cmd = new SqlCommand("Login_Validation", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 100)).Value = email;
    cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 50)).Value = password;
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
        dr.Read();
    }

    cmd.Dispose();
    con.Close();
}
catch (Exception)
{ }
}

cs文件:

protected void btnSubmit_Click(object sender, EventArgs e)
{
string login = obj.Login_Validation(txtEmail.Text, txtPassword.Text);
}

我无法理解如何解决错误 . 有人可以帮我吗?它给了我一个错误:“无法在obj.Login_Validation中将隐式void转换为字符串” .

4 回答

  • 0

    就像 DJ KRAZE 告诉你的那样

    你的 string login = obj.Login_Validation(txtEmail.Text, txtPassword.Text); 建议你的方法 Login_Validation 将返回一个字符串,所以你需要做两件事

    第一
    更改方法 Headers
    public void Login_Validation(string email, string password)
    public string Login_Validation(string email, string password)

    现在你需要在方法中添加一个返回

    例如

    public string Login_Validation(string email, string password)
        {
            //...
    
            try
            {
                //...
    
                return //<- your string if succeed
            }
            catch (Exception)
            { 
                return //<- your string if an error occurs
            }
    
            // or you place just one return here
        }
    
  • -1

    您将函数声明为void, public void Login_Validation 并尝试从中分配字符串 .

    这不会起作用,错误信息非常明确 .

    更改方法签名以返回字符串,并使用存储过程中的相关数据添加return语句 .

    编辑 - 实际上您的存储过程似乎没有返回任何内容 . 从那里开始!也许是输出参数 .

    ALTER PROCEDURE [dbo].[Login_Validation]
    
    @email varchar(100),
    @password varchar(50),
    @isValid bit outbit 
    AS
    BEGIN
    
    
    SET @isValid = EXISTS(SELECT * FROM SUBSCRIBER_MASTER WHERE EmailId=@email AND [Password]=@password AND [Status]='Y')
    
    END
    
  • -1

    您的Login_Validation不会返回任何内容 . 它返回一个'void' .

    如果您希望它返回某些内容,请更改签名以返回字符串 .

    public string Login_Validation
    

    然后返回你想要的任何东西

  • -1

    尝试使用SqlDataReader而不是void

    public SqlDataReader  Login_Validation(string email, string password)
    {
       SqlConnection con = new     SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
        LocalConnection_Class(con);
        SqlCommand cmd = new SqlCommand("Login_Validation", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 100)).Value = email;
        cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 50)).Value = password;
        SqlDataReader dr = cmd.ExecuteReader(); 
        cmd.Dispose();
        con.Close();
        return dr ;
    }
    

    并且这样称呼

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
    SqlDataReader   login = obj.Login_Validation(txtEmail.Text, txtPassword.Text);
    
    if(login.HasRows)
    {
    //Login Successfully 
    }
    else
    {
    //Login Failed
    }
    }
    

相关问题