在使用ASP连接MySQL数据库获取大量数据时,可能会遇到以下报错信息:
[MySQL][ODBC 5.3(a) Driver][mysqld-8.0.27]Commands out of sync; you can't run this command now
这是因为在获取MySQL数据时,ASP会将数据存储在缓存中,当数据量过大时,缓存会被占满,从而导致该错误。
解决该问题有如下两种方法:
- 增加缓存大小
- 使用多个连接获取数据
Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "DRIVER={MySQL ODBC 5.3 Driver}; SERVER=localhost; DATABASE=mydb; UID=myuser; PASSWORD=mypassword; OPTION=3" conn.Open conn.Execute "SET SESSION query_cache_size=268435456;"
通过修改MySQL查询缓存大小,可以增加缓存的空间,从而减少该错误出现的概率。
Function GetData() Dim conn, cmd, rs Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "DRIVER={MySQL ODBC 5.3 Driver}; SERVER=localhost; DATABASE=mydb; UID=myuser; PASSWORD=mypassword; OPTION=3" conn.Open Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandText = "SELECT * FROM mytable" Set rs = Server.CreateObject("ADODB.Recordset") rs.CursorLocation = adUseServer rs.Open cmd, , adOpenForwardOnly, adLockReadOnly Do While Not rs.EOF '处理数据 rs.MoveNext Loop rs.Close Set rs = Nothing Set cmd = Nothing conn.Close Set conn = Nothing End Function
使用多个连接可以将数据分批获取,从而减少缓存被占满的情况出现。