汇集DbDataReader

时间:2011-07-22 11:22:17

标签: c# .net asp.net sql-server ado.net

我们有一个DbDataReader用于从我们的应用程序连接SQL Server 2005。我想知道如何为DbDataReader

设置以下两个

1)Pooling = false

2)连接超时= 0;

请分享您的想法。

    DbCommand cmd = db.GetStoredProcCommand("aspInsertZipCode");
    cmd.CommandTimeout = 0;
    dataStringToProcess.Remove(dataStringToProcess.Length - 1, 1);

    db.AddInParameter(cmd, "@DataRows", DbType.String, dataStringToProcess.ToString());
    db.AddInParameter(cmd, "currDate", DbType.DateTime, DateTime.Now);
    db.AddInParameter(cmd, "userID", DbType.Int32, UserID);
    db.AddOutParameter(cmd, "CountOfUnchangedZipCode", DbType.String, 1000);

    DbDataReader rdr = null;

    try
    {

        rdr = (DbDataReader)db.ExecuteReader(cmd);
        if (rdr.Read())
        {

            if (!String.IsNullOrEmpty(Utility.GetString(rdr, "NewZipCode")))
                strNewZipCode = strNewZipCode + "," + Utility.GetString(rdr, "NewZipCode");

        }
        rdr.NextResult();
        if (rdr.Read())
        {

            strRetiredZipCode = strRetiredZipCode + "," + Utility.GetString(rdr, "RetiredZipCode");

        }

        int TempUnchageZipCount = Convert.ToInt32(db.GetParameterValue(cmd, "CountOfUnchangedZipCode"));
        CountOfUnchangedZipCode = CountOfUnchangedZipCode + TempUnchageZipCount;
        dataStringToProcess = new StringBuilder();
        cntRec = 0;

    }
    catch
    {
        if (rdr != null && (!rdr.IsClosed))
            rdr.Close();
        throw;
    }
    finally
    {
        if (rdr != null && (!rdr.IsClosed))
            rdr.Close();
    }
    cmd.Dispose();

由于

1 个答案:

答案 0 :(得分:4)

连接池由特定提供程序处理。您使用的是DbConnection抽象,但是例如,Sql Server通过连接字符串处理连接池和超时,例如:

SERVER=127.0.0.1;Database=MyDatabase;Integrated Security=true;Timeout=0;Pooling=false;

您使用的是什么提供商?

另一方面,您需要什么理由来禁用连接池和超时?这两项功能都是效率功能,可大大改善您的应用的执行方式通过禁用这些,并且有一些不良的行为代码,你可能最终得到一个相当不稳定的最终解决方案,这会占用内存并可能导致无终端连接......?