来源: SqlDataAdapter.Fill()时超时的一个另类的原因:你的存储过程中有超长的代码或注释吗?_文盲的专栏-CSDN博客
最近在研究网站中,使用SQLDataAdapter进行Fill时总超时的问题,使用查询分析器执行,结果秒出,使用SQL Server Profiler跟踪后,得到指令扔到查询分析器里,结果还是秒出,但是在页面执行,就永远是超时,相当纳闷啊
于是把SQL Server Profiler跟踪内容调整了一下
主要是追加 SP:Starting和SP:Completed以及SP:StmtStarting和SP:StmtCompleted,追加这个是为了跟踪存储过程递归和触发器内容
然后,跟踪结果一片一片的,慢慢看吧
然后,有一个存储过程的代码片段引起了我的注意
在这个存储过程中,有一大段的注释掉的代码,但是问题来了,在这个界面里发现有一行很长的注释代码被分成两行,但第二行没有当做注释处理!我的天啊。。。。
于是先修改下存储过程,看看是不是因为这个注释引起的超时,很简单的处理,把过长的注释内容分成两行注释掉
。。。。。。很无语,页面执行结果变成了秒出
WTF!页面执行存储过程难道和查询分析器执行存储过程时,对代码解析有差别么?好吧,亲身经历了惨痛教训,下次写存储过程我一定不会让一行代码过长!
后边经过多次测试,除了注释可能存在换行现象,超长的代码在观察过程中出现了指令丢失现象
例如 select aa,bb,cc………..xx,yy,zz from table where aa=1 and bb=2
当这个指令过长时,实际执行的可能就是select aa,bb,cc………..xx,yy,zz from table where aa=1,他把and bb=2给吃掉了。。。
所以,不管如何,存储过程、触发器、视图、自定义函数,反正是可以自己写代码的地方,一定注意换行,不要让代码超长。。。。
————————————————
版权声明:本文为CSDN博主「文盲老顾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/superwfei/article/details/82494273