如何使用数据集和tableAdapter c#增加SQL命令的命令时间

时间:2017-03-21 23:19:08

标签: c# sql-server dataset

我正在尝试设置(以编程方式或不是)指定数据集中的命令超时(A),现在我有我的MVC模型,我已经创建了几个不同的数据集(A,B,C ... N)存储过程,我只需要为一个数据集延长此时间(A ...再次 - .-),此外我已经看到了相关的不同问题,但没有一个解决了我的问题。我在下面给你看了我的代码:

 private static DAL.CopyCoinDataFromOracle.CoinDataTableAdapters.spCopyCoinDataTableAdapter cdOracle =
        new DAL.CopyCoinDataFromOracle.CoinDataTableAdapters.spCopyCoinDataTableAdapter();

public static bool CopyInformationFromOracle()
    {            
        bool? statusMethod = false;             
        cdOracle.CopyCoinDataFromOracle(ref statusMethod); //This is where I have the problem and the exception is thrown after 30 seconds are reached
        return Convert.ToBoolean(statusMethod);
    }

为了清楚起见,“cdOracle”是我的表适配器,我的存储过程链接到“CopyCoinDataFromOracle”方法,该查询第一次需要60seg执行,这就是为什么我想增加那个时间(通过默认30 seg。),信息从带有oracle的链接服务复制到SQL Server。您可以给予任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我终于解决了我的问题,感谢this related question in stackoverflow,链接由@regeit提供,这是我的解决方案:

我按照帖子所说的创建了这个类(但是没有给出详细的解释!)用以下方法:

using System;
using System.Data.SqlClient;
using System.Reflection;

namespace DAL.CopyCoinDataFromOracle.CoinDataTableAdapters
{    
    partial class spCopyCoinDataTableAdapter : System.ComponentModel.Component
    {
        public spCopyCoinDataTableAdapter(int Timeout)
        {            
            SetCommandTimeout(Timeout);
        }

        public void SetCommandTimeout(int Timeout)
        {
            foreach (var item in SelectCommand())
            {
                item.CommandTimeout = Timeout;                
            }
        }

        private System.Data.SqlClient.SqlConnection GetConnection()
        {
             return GetProperty("Connection") as      
             System.Data.SqlClient.SqlConnection;
        }

        private SqlCommand[] SelectCommand()
        {
             return GetProperty("CommandCollection") as SqlCommand[];
        }

        private Object GetProperty(String s)
        {
             return this.GetType().GetProperty(s, BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance).GetValue(this, null);
        }
    }
}

“DAL”是我的类库,“CopyCoinDataFromOracle”是一个包含我的数据集的文件夹,“CoinDataTableAdapter”是命名空间的名称,现在我把这段代码放在我的tableadapter的代码中,名为“CopyCoinData.xsd”(只是双clic并擦除自动生成的代码来创建它。)

最后如何使用它:

private static DAL.CopyCoinDataFromOracle.CoinDataTableAdapters.spCopyCoinDataTableAdapter cdOracle =
            new DAL.CopyCoinDataFromOracle.CoinDataTableAdapters.spCopyCoinDataTableAdapter(80); 

其中80表示将在对象的构造函数中设置的超时,请让我们知道更多问题。

希望能提供帮助。