2

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

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();
}
4

6 回答 6

4

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

private string UserExist(string username)

如果你 return 更好bool,因为你正在检查 ifNpcReader.HasRows然后"1"在 true 和"0"false 的情况下返回。如果在返回值之前关闭连接,它也会更好。

始终使用SqlParameter或参数化查询,您当前的查询是为SQL 注入打开的。

于 2013-04-26T12:10:50.450 回答
3

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

private void UserExist(string username)

你可能想返回一个布尔值

private bool UserExist(string username)

return true;
// or
return false;
于 2013-04-26T12:11:24.887 回答
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;
            }
        }
    }
}

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

于 2013-04-26T12:21:32.897 回答
1
private void UserExiest(string username)

将其更改为:

private string UserExiest(string username)

看到你似乎正在返回一个字符串......

于 2013-04-26T12:10:50.930 回答
0

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

private string UserExiest(string username)
于 2013-04-26T12:12:20.670 回答
0

正如这里的许多回复所建议的那样,您需要为您的函数添加一个返回类型。更改voidstring以返回值。由于值为 a 1or 0,因此返回trueor可能会更好false

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

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 trueand false

于 2013-04-26T12:18:07.490 回答