Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从函数返回值-错误_C# - Fatal编程技术网

C# 从函数返回值-错误

C# 从函数返回值-错误,c#,C#,我收到一个错误,我无法从下面的函数返回值。我们将不胜感激 private void UserExiest(string username) { SqlConnection myConnection = new SqlConnection("user id=test;" + "password=test;" + "server=.;" + "Trusted_Connection=yes;" +

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

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

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

private string UserExist(string username)
最好返回
bool
,因为您正在检查NpcReader.HasRows是否为
。如果在返回值之前关闭连接也会更好

始终使用或参数化查询,当前查询将为打开

将此更改为:

private string UserExiest(string username)

由于您似乎正在返回字符串…

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

private void UserExist(string username)
您可能希望返回一个布尔值

private bool UserExist(string username)

return true;
// or
return false;

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

private string UserExiest(string username)

正如在这里的许多响应中所建议的,您需要向函数中添加一个返回类型。将
void
更改为
string
以返回值。由于值是
1
0
,因此最好返回
true
false

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;
            }
        }
    }
}
此外,在返回后还有connectionclose语句。在应用程序的正常流中不会触发此语句。请尝试以下操作:

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

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;
            }
        }
    }
}

尽管您的原始函数不返回任何值,也不关闭连接,但您正在尝试实现不必要的逻辑(返回字符串标志,而不是返回ready to use bool值,这是
reader.HasRows
expression的结果)。最后,请记住在使用实现
IDisposable
的类型时使用
语句,这保证执行与释放、释放或重置非托管资源相关的应用程序定义的任务(请参阅)

更改为
private int userexest
如果您从未关闭连接,则不应始终依赖GC EDIT,而只需
返回NPCReader。HasRows
对SQLConnection使用Using语句,这样更好,并将在完成后处理该单词拼写为
exist
而不是
exist
,因此我还将更改方法名称。如果我是你,我的眼睛会一直痛。