使用 Microsoft.ApplicationBlocks.Data SqlHelper 查询超时以及解决方案

 提示: 后面附有文件,不喜欢看吐槽的,直接到文章结尾下载

摘要:Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码,可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReader、DataSet 和 XmlReader 对象。您可以在自己的 .NET 应用程序中将其作为构造块来使用,以减少需要创建、测试和维护的自定义代码的数量。您可以下载完整的 C# 和 Visual Basic .NET 源代码以及综合文档。【这段是抄的

故事:

最近在项目中使用到了这个古老的组件,一切都是那么的美好,只到昨天下午,当我用这个组件执行一个时间比较长的存储过程时,厄运就来了:

1             try
2             {
3                 SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, sql);
4                 return 1;
5             }
6             catch (Exception ex)
7             {
8                 return -1;
9             }

每当执行一段时间,自动就抛出Timeout的异常,好吧,作为一个有理智的程序员,马上就去找怎么给SqlHelper中的查询自定义Timeout,然而……悲催的我竟然没有找到,好吧,拿出反编译工具看看有没有Timeout字段,依然没有

那么只能借助网络去找答案了,某度 呵呵,大量的转载,特意在搜索中加入了“Timeout”  “超时” ,然并卵,万能的过滤大发,把那些词都忽略了。

再想想 google 哎……  后来只能通过一些国内的“谷粉搜搜”之类的找一找了,虽然不多但还是找到了,都是E文的,然后借助自己很渣的E温水瓶,成功没找到答案。

好吧那只能看看有没有源代码了,某度照样渣,最后在一个外国网站上还真找到了源代码,然后简单修改

 1         /// <summary>
 2         /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
 3         /// to the provided command.
 4         /// </summary>
 5         /// <param name="command">the SqlCommand to be prepared</param>
 6         /// <param name="connection">a valid SqlConnection, on which to execute this command</param>
 7         /// <param name="transaction">a valid SqlTransaction, or ‘null‘</param>
 8         /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
 9         /// <param name="commandText">the stored procedure name or T-SQL command</param>
10         /// <param name="commandParameters">an array of SqlParameters to be associated with the command or ‘null‘ if no parameters are required</param>
11         private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters)
12         {
13             //if the provided connection is not open, we will open it
14             if (connection.State != ConnectionState.Open)
15             {
16                 connection.Open();
17             }
18
19             command.CommandTimeout = Timeout;//注意这里是我加的
20             //associate the connection with the command
21             command.Connection = connection;
22
23             //set the command text (stored procedure name or SQL statement)
24             command.CommandText = commandText;
25
26             //if we were provided a transaction, assign it.
27             if (transaction != null)
28             {
29                 command.Transaction = transaction;
30             }
31
32             //set the command type
33             command.CommandType = commandType;
34
35             //attach the command parameters if they are provided
36             if (commandParameters != null)
37             {
38                 AttachParameters(command, commandParameters);
39             }
40
41             return;
42         }

编译,引用,成功执行,一切又是那么的美好。

好吧,故事就到这了,特地把文件分享出来,毕竟助人为快乐之本,

里面有加入了Timeout字段并编译好的文件和 源码安装文件(未修改)

http://files.cnblogs.com/files/twzy/Microsoft.ApplicationBlocks.Data.zip

最后宣传一下自己的抓包软件

NetAnalyzer下载地址

NetAnalzyer交流群:39753670 (PS 只提供交流平台,群主基本不说话^_^)

[转载请保留作者信息  作者:冯天文  网址:http://www.cnblogs.com/twzy/p/4976867.html]

时间: 2024-08-01 13:46:53

使用 Microsoft.ApplicationBlocks.Data SqlHelper 查询超时以及解决方案的相关文章

Aqua Data Studio 查询结果中文乱码

菜单栏里[文件]-[选项]会弹出个选项对话框 然后选[一般]  在右边的[外观]下面找到[网格结果字体] 将字体类型改成宋体就行了 Aqua Data Studio 查询结果中文乱码,布布扣,bubuko.com

vs2005中microsoft ado data control 6.0控件问题

在vs2005中是没有这个控件的,需要注册,步骤如下: 1. 先到C:\WINDOWS\system32目录下看看你的系统里是否已经有了MSADODC.ocx和MSDATGRD.ocx这两个文件(多半是没有的),没有就去下载: 2.在VS 2005中注册MSADODC.ocx和MSDATGRD.ocx这两个控件.在VS 2005中点击"Tools" --> "Visual Studio 2005 Command Prompt",输入如下命令即可: regsvr

实战:MySQL Sending data导致查询很慢的问题详细分析(转)

这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没有建好,于是使用explain查看查询计划,结果如下: 从explain的结果来看,整个语句的索引设计是没有问题的,除了第一个表因为业务需要进行整表扫描外,其它的表都是通过索引访问

MySQL Sending data导致查询很慢的问题详细分析

转自:http://blog.csdn.net/yah99_wolf/article/details/8573621 这两天帮忙定位一个mysql查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没有建好,于是使用explain查看查询计划,结果如下: 从exp

VS 尝试从数据库进行更新时,遇到类型为“Microsoft.VSDesigner.Data.Local.ConnectionStringConverterServiceException”的异常。异常消息为:“”;

最近,由于更换机器,在新机器上运行更新数据库模型,报错: 尝试从数据库进行更新时,遇到类型为"Microsoft.VSDesigner.Data.Local.ConnectionStringConverterServiceException"的异常.异常消息为:""; 这样的错误一般都是进行Edmx 从数据库中更新到模型产生的,错误截图如图: 我用的是VS2012,数据库为MySQL 解决方案一: 找到自己的Entities.edmx文件,检查ConnectionS

Confluence 6 配置数据库查询超时时间

如果数据库的查询时间太长同时你的应用程序显示没有响应,你可以配置数据库的查询超时时间.在默认情况下 Confluence 没有超时时间.希望配置数据库查询超时时间,在你的测试服务器上进行下面的操作: 1. 关闭 Confluence. 2. 从 confluence-x.x.x.jar 文件中解压出 databaseSubsystemContext.xml.这个文件在 confluence/WEB-INF/lib/,同时拷贝到 confluence/WEB-INF/classes/ 目录下面.

mybatis的sql语句导致索引失效,使得查询超时

mybaitis书写sql需要特别注意where条件中的语句,否则将会导致索引失效,使得查询总是超时.如下语句会出现导致索引失效的情况: with test1 as (select count(C_FUNDACCO) val,'a' v from TINF_REQUEST a where a.C_FUNDCODE = #{cFundcode} and a.D_DATADATE = #{dDatadate}), test2 as (select count(C_FUNDACCO) val,'a'

Android Studio安装后Fetching android sdk component information超时的解决方案

问题描述: Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试. Android Studio安装完成后,如果直接启动,Android Studio会去获取 android sdk 组件信息,这个过程相当慢,还经常加载失败,导致Android Studio启动不起开.解决办法就是不去获取android sdk 组件信息. 解决方法:

Microsoft Windows Server 2003 R2 分布式文件系统解决方案概述

一.DFS.FSRM简介 Microsoft Windows Server 2003 R2 分布式文件系统解决方案概述 此处为微软technet上讲述的DFS(分布式文件系统的优势及特点),请午饭们耐心.细心的去参阅一下,对你去构建企业级的文件服务器会很有帮助的,还有需要提醒的是DFS是在windows 2003 R2时代就已经出现的产物,此处做搭建讲解主要是分享2008R2上面的一些配置. FSRM(文件服务器资源管理器)简介 此处为FSRM的介绍,大家先了解一下FSRM能帮我们做到什么,具有