我收到错误,我无法从下面的函数返回值。将不胜感激。
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();
}
答案 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
以返回值。由于值为1
或0
,因此最好返回true
或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
true
和false
。