通过mysql中的vb.net使用当前日期作为搜索参数

通过mysql中的vb.net使用当前日期作为搜索参数,mysql,vb.net,Mysql,Vb.net,我正在尝试根据当前用户和当前日期查询我的数据库。我目前没有从我的查询中得到任何结果,我认为问题在于我在vb.net中设置了当前日期的格式。查询按原样进行 query = "SELECT movie_name from movie2 Where movie_id=(SELECT movie_id from rental where client_username='" & currentUser & "' AND start_date<='" & Format(Now

我正在尝试根据当前用户和当前日期查询我的数据库。我目前没有从我的查询中得到任何结果,我认为问题在于我在vb.net中设置了当前日期的格式。查询按原样进行

query = "SELECT movie_name from movie2 Where movie_id=(SELECT movie_id from rental where client_username='" & currentUser & "' AND start_date<='" & Format(Now, "yyyy-MM-dd") & "' AND return_date>='" & Format(Now, "yyyy-MM-dd") & "')"
我知道除了调用currentUser之外,查询的其余部分都可以工作,因为我已经在mySql服务器上对它进行了测试。我以前调用过currentUser,它是通过模块中的变量保存的,没有任何麻烦,所以我觉得问题在于我的日期。 我不知道如何设置当前日期的格式,以便mySql能够正确接收它? 我也试过这个代码

query = "SELECT movie_name from movie2 Where movie_id=(SELECT movie_id from rental where client_username='" & currentUser & "' AND start_date<='" & DateTime.Now.ToString("yyyy-MM-dd") & "' AND return_date>='" & DateTime.Now.ToString("yyyy-MM-dd") & "')"
没有成功。任何帮助都将不胜感激!
谢谢,Alan。

问题是在构建sql命令时使用字符串连接的通常错误做法。 补救办法总是一样的。参数化查询

 query = "SELECT movie_name from movie2 Where movie_id=" & _
         "(SELECT movie_id from rental where client_username=@name"  &_
         " AND start_date<=@date AND return_date>=@date"
 Using cmd = new MySqlCommand(query, connection)
    cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = currentUser
    cmd.Parameters.Add("@date", MySqlDbType.DateTime).Value = DateTime.Now
    Using reader = cmd.ExecuteReader()
       .... now read your data ....
    End Using
End Using
使用字符串连接时,您很容易受到攻击,当强制将小数或日期转换为字符串时,您很容易成为错误转换的受害者。参数避免了所有这些

编辑:使用MySqlDataAdapter

 query = "SELECT movie_name from movie2 Where movie_id=" & _
         "(SELECT movie_id from rental where client_username=@name"  &_
         " AND start_date<=@date AND return_date>=@date"
 Using cmd = new MySqlCommand(query, connection)
    cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = currentUser
    cmd.Parameters.Add("@date", MySqlDbType.DateTime).Value = DateTime.Now
    Using adapter = new MySqlDataAdapter(cmd)
       Dim dt = new DataTable()
       adapter.Fill(dt)
    End Using
End Using

是的,但是这个问题应该用参数化查询来解决。我想通过数据帧显示数据,所以我使用的是MySqlDataAdapter,而不是读卡器,我该如何更改代码来实现这一点呢,您可以使用接受MySqlCommand并传递上面准备的命令的MySqlDataAdapter构造函数,而不是创建/使用MySqlDataReader