我在经典ASP(VBScript)中连接到MS SQL Server 2012数据库.这是我的连接字符串:
Provider=SQL Server Native Client 11.0;Server=localhost;
Database=databank;Uid=myuser;Pwd=mypassword;
Run Code Online (Sandbox Code Playgroud)
当我执行此SQL命令时:
UPDATE [info] SET [stamp]='2014-03-18 01:00:02',
[data]='12533 characters goes here',
[saved]='2014-03-18 01:00:00',
[confirmed]=0,[ip]=0,[mode]=3,[rebuild]=0,
[updated]=1,[findable]=0
WHERE [ID]=193246;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Microsoft SQL Server Native Client 11.0
error '80040e31'
Query timeout expired
/functions.asp, line 476
Run Code Online (Sandbox Code Playgroud)
SQL查询很长,数据字段更新为12533个字符.ID列已编入索引,因此查找ID为193246的帖子应该很快.
当我在SQL Server Management Studio上执行完全相同的SQL表达式(复制和粘贴)时,它立即成功完成.什么都没有问题.所以SQL本身没有问题.我甚至尝试过使用ADODB.Recordset对象并通过它更新(没有自编SQL),但我仍然得到相同的超时错误.
如果我在Management Studio中转到工具>选项>查询执行,我会看到执行超时设置为0(无限).在工具>选项>设计器下,我看到事务超时设置为30秒,因为脚本和数据库在同一台计算机上("localhost"在连接字符串中),所以应该足够了.
这里发生了什么?为什么我可以在Management Studio中执行SQL而不是在我的ASP代码中执行?
编辑:尝试将设计师选项卡中的30秒超时设置为600秒,以确保,但我仍然得到相同的错误(在页面加载btw 30秒后发生).
这是我用来在ASP页面上执行SQL的代码:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=SQL Server Native Client 11.0;
Server=localhost;Database=databank;Uid=myuser;Pwd=mypassword;"
Conn.Execute "UPDATE [info] SET [stamp]='2014-03-18 01:00:02',
[data]='12533 characters goes here',[saved]='2014-03-18 01:00:00',
[confirmed]=0,[ip]=0,[mode]=3,[rebuild]=0,[updated]=1,[findable]=0
WHERE [ID]=193246;" …Run Code Online (Sandbox Code Playgroud)