超时已过。操作完成之前超时时间已过,或者服务器没有响应。”

Sem*_*ian 0 c# asp.net stored-procedures

我正在运行一个存储过程,但在运行它时显示如下错误

超时已过。操作完成前超时时间已过或服务器未响应。

我已经设置了我的网络配置

   <add name="SAMPLECONNECTION" connectionString="Data Source=ADMIN\SQLEXPRESS;Initial Catalog=PFGRT;Persist Security Info=True;MultipleActiveResultSets=true;User ID=sa;connect Timeout =1000000;Password=PASSWORD"
  providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

我也试过像设置一样connect Timeout = 0;,但我得到了同样的错误。

我该如何解决?

我的存储过程调用类

public DataSet adFeedBackReportFacultyWise(string SetID, string FacultyID, string SubjectID,string groupid)
{
    DbUtil du = new DbUtil();
    Dictionary<string, SqlParameter> cmdParameters = new Dictionary<string, SqlParameter>();
    cmdParameters["SetID"] = new SqlParameter("SetID", SetID);
    cmdParameters["FacultyID"] = new SqlParameter("FacultyID", FacultyID);
    cmdParameters["SubjectID"] = new SqlParameter("SubjectID", SubjectID);
    cmdParameters["groupid"] = new SqlParameter("groupid", groupid);

    return du.ExecuteQuery("adFeedBackReportFacultyWise", cmdParameters);
}
Run Code Online (Sandbox Code Playgroud)

我的 DButil 类是

public class DbUtil
{
    string connection = ConfigurationManager.ConnectionStrings["gatikkcmsConnectionString"].ConnectionString;

    public SqlDataAdapter ad;
    public DataTable dt = new DataTable();
    SqlConnection conn;
    SqlCommand cmd = new SqlCommand();
    public DbUtil()
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["gatikkcmsConnectionString"].ConnectionString);
        cmd = null;
    }

    public SqlConnection getConnection()
    {
        return new SqlConnection(connection);
    }
   public int ExecuteCommand(string storedProcName, Dictionary<string, SqlParameter> procParameter)
    {
        int rc;
        using (SqlConnection cn = getConnection())
        {
            cn.Open();
            // create a SQL command to execute the stored procedure
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = storedProcName;
                // assign parameters passed in to the command
                foreach (var procParameters in procParameter)
                {
                    cmd.Parameters.Add(procParameters.Value);
                }
                rc = cmd.ExecuteNonQuery();
            }
            cn.Close();
        }
        return rc;
    }
}
Run Code Online (Sandbox Code Playgroud)

Bre*_*een 5

问题不在于连接超时(与数据库服务器建立连接所花费的时间),而在于命令超时(执行命令所花费的时间)。

在您的DbUtil课程中,将命令超时设置为SqlCommand如下所示:

using (SqlCommand cmd = cn.CreateCommand())
{
    cmd.CommandTimeout = 120; //set timeout - use appropriate value
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = storedProcName;
    // assign parameters passed in to the command
    foreach (var procParameters in procParameter)
    {
        cmd.Parameters.Add(procParameters.Value);
    }
    rc = cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

检查存储过程的性能也是值得的。