如何从函数返回查询的值?

时间:2012-05-17 10:07:39

标签: 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(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'状态。

可能是什么问题?

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

是的... tempMySqlDataReader,而不是int。您无法将MySqlDataReader分配给int类型的变量。

我怀疑你想要:

chip = temp.GetInt32(0);

请注意,您应该使用using语句来释放所有资源,而不是仅显式关闭连接。如果有多个结果(或没有结果),您还应该考虑要发生的事情。

此外,除非用户将其用户名放在引号中,否则您的代码将在执行时失败。 不要通过向SQL添加引号来修复此问题 - 而是使用参数化查询。否则你很容易受到SQL injection attacks的攻击。基本上,你几乎不应该使用这样的值动态地构建SQL - 总是参数化它们。

答案 1 :(得分:1)

tempMySqlDataReaderchipint。当然你不能把一个分配给另一个。

答案 2 :(得分:1)

对您编辑过的问题的回答:

您确定select语句是否返回任何值?您的' "" '"中有空格,因此它会查找' Rohan '而不是'Rohan'。尝试

UserName ='" + username + "'"

或者更好,就像Jon建议的那样,使用参数化查询!

答案 3 :(得分:0)

因为您的查询只返回一个值,所以您可以使用它:

chip  = (int)(command.ExecuteScalar() ?? 0);

请查看以下链接以获取更多详细信息:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx