码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-11-19 13:12:43      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

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

 

摘要: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]

 

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

标签:

原文地址:http://www.cnblogs.com/twzy/p/4976867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!