MySQL查询故障

时间:2009-11-18 20:28:13

标签: vb.net visual-studio-2008 mysql

我的VB.NET程序中有MySQL Query故障。 这是VB.NET中的查询:

"SELECT Points FROM user WHERE Username = '" & UsernameText.Text & "';"

它将从用户表中选择他们输入的用户名中的points列。当我部署它时,它会将其帐户的点值设置为0。出了什么问题?我甚至没有插入任何东西。

4 个答案:

答案 0 :(得分:2)

我可以看到两种可能性:

  1. 其他一些代码正在更新积分值
  2. SQL注入:
  3. 如果UsernameText.Text中的值为

    blah'; update user set points = 0;--
    

    然后生成的SQL将是:

    SELECT Points FROM user where Username = 'blah'; update user set points = 0;--';
    

答案 1 :(得分:2)

我不确定为什么你的表会被select查询更新。但我确实知道你要构建你的查询字符串都错了。你应该这样做:

Using cn As New MySqlConnection("your connection string here"), _
      cmd As New MySqlCommand("SELECT points FROM user WHERE username= @UserName")

    cmd.Parameters.AddWithValue("@UserName", UsernameText.Text)
    cn.Open()

    ''# ExecuteReader or Fill command go here, connection will be automatically closed
    ''# when control falls out of the using block, even if an exception is thrown

End Using

答案 2 :(得分:1)

SELECT查询无法更改存储在数据库中的值。这是一个只读命令。要么值已经为零,要么查询只返回零(尽管存储在数据库中的内容),否则它根本不返回任何行。

我猜你的查询没有正确形成,并且它没有返回任何行。

您的VB.NET代码中可能有一个变量,其初始值为零,在读取SQL查询的结果时会被覆盖。当SQL查询未返回任何行时,此变量将保留其初始零值。

所以尝试一个实验:将你的points变量初始化为-99或者其他东西然后再试一次。我打赌你的应用程序会显示-99。

此外,我假设数据库中实际的数据没有变为零。只有您显示的内容默认为零,因为您的SQL查询无法正常运行。

在调试动态SQL时,需要查看完整的SQL查询 - 后插入任何动态变量。当你盯着构建SQL查询的VB.NET字符串表达式时,很难调试。这就像访问汽车工厂来解决您的汽车问题一样。

答案 3 :(得分:0)

在MySQl中,字段和表格在这种情况下用撇号/反引号表示......

"SELECT `Points` FROM `user` WHERE `Username`= '" & UsernameText.Text & "';"

检查是否有效。希望它有所帮助。