通过mysql中的vb.net使用当前日期作为搜索参数
我正在尝试根据当前用户和当前日期查询我的数据库。我目前没有从我的查询中得到任何结果,我认为问题在于我在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
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