1

悪いコードのスニペットを次に示します。

    string storedProcedure = "sp3111Commissions";
    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand()) {
    string ConnectionString = CMSLayers.DataLayer.Universal.GetConnectionString();
    ConnectionString = 
    using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection()) {
    //Response.Write(EndDate2.ToString());
    //Response.End();
            conn.ConnectionString = ConnectionString;
    //Response.Write(ConnectionString); Response.End(); return null;
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Connection = conn;
    cmd.CommandText = storedProcedure;
    cmd.Parameters.Add("@ShopID", System.Data.SqlDbType.Int);
    cmd.Parameters["@ShopID"].Value = ShopID;
    cmd.Parameters.Add("@StartDate", System.Data.SqlDbType.DateTime);
    cmd.Parameters["@StartDate"].Value = StartDate;
    cmd.Parameters.Add("@EndDate", System.Data.SqlDbType.DateTime);
    cmd.Parameters["@EndDate"].Value = EndDate;
    cmd.Parameters.Add("@StartDate2", System.Data.SqlDbType.DateTime);
    cmd.Parameters["@StartDate2"].Value = StartDate2;
    cmd.Parameters.Add("@EndDate2", System.Data.SqlDbType.DateTime);
    cmd.Parameters["@EndDate2"].Value = EndDate2;
    cmd.CommandTimeout = 1380;

    try
    {
        System.Data.DataSet ds;
        using (System.Data.SqlClient.SqlDataAdapter da= new System.Data.SqlClient.SqlDataAdapter()) {
        System.Data.DataTable Table = null;

        conn.Open();

        da.SelectCommand = cmd;

        using (ds = new System.Data.DataSet()) {

        da.Fill(ds);

        if (ds.Tables.Count > 0)
        {
            if (ds.Tables[0].Rows.Count > 0)
            {
                Table = ds.Tables[0];
            }
        }
        conn.Close();
        return Table;
        }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }       
    }
    }

約 2 分間ハングアップし、最終的にタイムアウト エラーが発生します。ただし、まったく同じパラメーターを使用して SQL Server Management Studio でストアド プロシージャを実行すると、データは文字通り瞬時に返されます。

「ハング」は「da.Fill(ds);」で発生しています。ライン。誰にもアイデアはありますか?ちなみに、これは.NET 2.0です

4

1 に答える 1

2

重複した質問の可能性?

SqlDataAdapter.Fill() タイムアウト - 基になる Sproc がすぐに戻る

WITH(NOLOCK)あなたのSELECT声明で考慮してください。

于 2013-06-24T16:50:11.733 に答える