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
,因此我还将更改方法名称。如果我是你,我的眼睛会一直痛。