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

4 回答 4

0

就像DJ KRAZE告诉你的那样

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

首先
将您的方法标题更改
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
    }
于 2013-04-25T07:47:59.773 回答
-1

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

那是行不通的,并且错误消息非常清楚。

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

编辑 - 实际上你的存储过程似乎没有返回任何东西。从那里开始!也许是一个输出参数。

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
于 2013-04-05T18:07:59.827 回答
-1

您的 Login_Validation 不返回任何内容。它返回一个“无效”。

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

public string Login_Validation

然后返回任何你想要的。

于 2013-04-05T18:08:43.423 回答
-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
}
}
于 2013-04-05T18:31:21.357 回答