从函数返回值 - 错误

时间:2013-04-26 12:09:53

标签: c#

我收到错误,我无法从下面的函数返回值。将不胜感激。

private void UserExiest(string username)
{
    SqlConnection myConnection = new SqlConnection("user id=test;" +
            "password=test;" +
            "server=.;" +
            "Trusted_Connection=yes;" +
            "database=DB; " +
            "MultipleActiveResultSets=True;" +
            "connection timeout=30");

    myConnection.Open();
    SqlCommand CHECKNPC = new SqlCommand("select struserid from USERDATA where strUserId = '" + username + "'", myConnection);
    SqlDataReader NpcReader = CHECKNPC.ExecuteReader();
    if (NpcReader.HasRows)
    {
        return "1";
    }
    else
    {
        return "0";
    }
    myConnection.Close();
}

6 个答案:

答案 0 :(得分:4)

您的函数的返回类型为void。你不能从那里返回一个字符串。将您的功能签名更改为:

private string UserExist(string username)

如果您返回bool,则会更好,因为您正在检查NpcReader.HasRows,然后在出现真假时返回"1",如果出现错误则返回"0"。如果在返回值之前关闭连接也会更好。

始终使用SqlParameter或参数化查询,您当前的查询对SQL Injection开放。

答案 1 :(得分:3)

您的方法签名没有返回类型:

private void UserExist(string username)

你可能想要返回一个布尔值

private bool UserExist(string username)

return true;
// or
return false;

答案 2 :(得分:3)

private bool UserExist(string username)
{
    using (var con = new SqlConnection("..."))
    {
        con.Open();
        using (var cmd = new SqlCommand("...", con))
        {
            using (var r = cmd.ExecuteReader())
            {
                return r.HasRows;
            }
        }
    }
}

尽管你的原始函数没有返回任何值并且没有关闭连接 - 你正试图实现不必要的逻辑(返回字符串标志而不是返回准备使用bool值,这是{的结果{1}}表达式)。最后,在使用实现reader.HasRows的类型时,请记住using语句,这样可以保证执行与释放,释放或重置非托管资源相关的应用程序定义任务(请参阅msdn)。

答案 3 :(得分:1)

private void UserExiest(string username)

将其更改为:

private string UserExiest(string username)
看到你似乎正在返回一个字符串...

答案 4 :(得分:0)

您是否在方法中使用return语句,而其定义显示您必须返回void? 将您的定义方法更改为:

private string UserExiest(string username)

答案 5 :(得分:0)

正如许多响应中所建议的那样,您需要为函数添加返回类型。将void更改为string以返回值。由于值为10,因此最好返回truefalse

此外,您在返回后有连接关闭语句。在正常的应用程序流程中不会触发此语句。请尝试以下方法:

private bool UserExiest(string username)
{
    SqlConnection myConnection = new SqlConnection("user id=test;" +
            "password=test;" +
            "server=.;" +
            "Trusted_Connection=yes;" +
            "database=DB; " +
            "MultipleActiveResultSets=True;" +
            "connection timeout=30");
    try
    {
        myConnection.Open();
        SqlCommand CHECKNPC = new SqlCommand("select struserid from USERDATA where strUserId = '" + username + "'", myConnection);
        SqlDataReader NpcReader = CHECKNPC.ExecuteReader();
        return NpcReader.HasRows;
    }
    finally
    {
        if (myConnection.State != System.Data.ConnectionState.Closed)
        {
            myConnection.Close();
        }

    }
}

我只是添加了一个finally块,以确保关闭连接,并将返回类型更改为boolean truefalse