C# 如何从函数返回查询值?
我编写了一个函数来返回执行的SQL查询结果,如下所示:C# 如何从函数返回查询值?,c#,asp.net,sql,database,function,C#,Asp.net,Sql,Database,Function,我编写了一个函数来返回执行的SQL查询结果,如下所示: EDITED : public int GetChips(int points, string username) { int chip = 0; string getChips = "SELECT Chips from tbl_UserInfo where UserName =' " + username + " '"; con = new MySqlConnection(co
EDITED :
public int GetChips(int points, string username)
{
int chip = 0;
string getChips = "SELECT Chips from tbl_UserInfo where UserName =' " + username + " '";
con = new MySqlConnection(conString);
con.Open();
MySqlCommand cmd = new MySqlCommand(getChips, con);
MySqlDataReader chips = cmd.ExecuteReader();
while (chips.Read())
{
chip = chips.GetInt32(0);
if (chip > points)
{
if (points == 5000)
{
chip = chip - 5000;
}
else if (points == 10000)
{
chip = chip - 10000;
}
}
}
con.Close();
return chip;
}
它将芯片的值返回为0。此代码不处于“while”状态
有什么问题吗
如何解决这个问题?
temp
是一个MySqlDataReader
,而chip
是一个int
。当然你不能把一个分配给另一个 temp
是一个MySqlDataReader
,而chip
是一个int
。当然你不能把一个分配给另一个 是的temp
是一个MySqlDataReader
,而不是int
。不能将MySqlDataReader
分配给int
类型的变量
我怀疑你想要:
chip = temp.GetInt32(0);
请注意,您应该使用using
语句来释放所有资源,而不仅仅是显式关闭连接。如果有不止一个结果(或者没有结果),你也应该考虑你想发生的事情。
此外,您的代码将在执行时失败,除非用户将其用户名加引号。不要通过在SQL中添加引号来解决这个问题,而是使用参数化查询。否则你很容易受到伤害。基本上,您不应该使用像这样的值动态地构建SQL—始终将它们参数化。是的
temp
是一个MySqlDataReader
,而不是int
。不能将MySqlDataReader
分配给int
类型的变量
我怀疑你想要:
chip = temp.GetInt32(0);
请注意,您应该使用using
语句来释放所有资源,而不仅仅是显式关闭连接。如果有不止一个结果(或者没有结果),你也应该考虑你想发生的事情。
此外,您的代码将在执行时失败,除非用户将其用户名加引号。不要通过在SQL中添加引号来解决这个问题,而是使用参数化查询。否则你很容易受到伤害。基本上,您不应该使用这样的值动态构建SQL—始终将它们参数化。因为您的查询只返回一个值,所以您可以使用:
chip = (int)(command.ExecuteScalar() ?? 0);
有关更多详细信息,请查看以下链接:
因为您的查询只返回一个值,所以您可以使用:
chip = (int)(command.ExecuteScalar() ?? 0);
有关更多详细信息,请查看以下链接:
对您编辑的问题的回答: 您确定select语句正在返回任何值吗?您的
'“
和”“
中有一个空格,因此它将查找'Rohan'
而不是'Rohan'
。试试看
UserName ='" + username + "'"
或者更好的是,像Jon建议的那样,使用参数化查询!对您编辑的问题的回答: 您确定select语句正在返回任何值吗?您的
“
和”
中有一个空格,因此它将查找“Rohan”
而不是“Rohan”
。试一试
UserName ='" + username + "'"
或者更好,就像Jon建议的那样,使用参数化查询 什么是薯条?不应该是临时工吗?和temp[]…您只是返回
chip
的最后一个值,如果chip
的最后一个值大于点,则减去5000或10000。不知道你所说的“最外层芯片的价值”是什么意思。你得到了什么结果?你期望得到什么结果?芯片是什么?不应该是临时工吗?和temp[]…您只是返回chip
的最后一个值,如果chip
的最后一个值大于点,则减去5000或10000。不知道你所说的“最外层芯片的价值”是什么意思。你得到了什么结果?你期望得到什么结果?谢谢你的回复。我使用了你的代码,它工作得很好。但它并没有返回我想要的确切值。请验证我编辑的代码并帮助我解决它。@Rohan:不,你完全忽略了我警告过你的安全漏洞。听起来好像你没有匹配用户名,如果它没有进入而循环…@Jon,没错。查询正在查找类似于UserName='Rohan'
的内容,而不是'Rohan'
。感谢您的回复。我使用了你的代码,它工作得很好。但它并没有返回我想要的确切值。请验证我编辑的代码并帮助我解决它。@Rohan:不,你完全忽略了我警告过你的安全漏洞。听起来好像你没有匹配用户名,如果它没有进入而循环…@Jon,没错。查询正在查找类似于用户名='Rohan'
的内容,而不是'Rohan'
@comecme-感谢您的回复。是的,我的选择查询返回值。但是它没有进入内部,而返回0:(是的,你是对的。这就是问题所在。现在它工作正常。谢谢。:@comecme-谢谢你的回复。是的,我的选择查询返回值。但是它没有进入内部,而条件查询返回0:(是的,你是对的。这就是问题所在。现在它工作正常。谢谢。)