C# 如何从函数返回查询值?

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

我编写了一个函数来返回执行的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(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:(是的,你是对的。这就是问题所在。现在它工作正常。谢谢。)