执行方法时的超时值

时间:2015-04-23 22:16:20

标签: c#

我正在尝试修改数据库中的一个表,但是当选择运行大约三十秒时会挂起,然后出现超时错误。我正在使用Sql server 2012和C#。

这里是表的代码和结构。

表Estudiante

IdEstudiante            Int,
Est_PrimerNombre        varchar(15),
Est_SegundoNombre       varchar(15),
Est_PrimerApellido      varchar(15),
Est_SegundoApellido     varchar(15),
Est_FechaNacimiento     datetime,
Est_Edad                Int,
IdTutor                 Int,
IdCurso                 Int,
Est_CuotaMensual        numeric(18,2),
IdAnioEscolar           Int,
Est_NumeroSegSocial     varchar(20),
Est_NumeroAfiliado      varchar(20),
Est_CompaniaAseguradora varchar(50),
Est_Estado              Int

代码:

public void EditEstudiante()
{
    SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["cnxString"].ToString());

    cnx.Close();

    query = @"UPDATE Estudiante SET 
                Est_PrimerNombre = @Est_PrimerNombre,
                Est_SegundoNombre = @Est_SegundoNombre,
                Est_PrimerApellido = @Est_PrimerApellido,
                Est_SegundoApellido = @Est_SegundoApellido,
                Est_FechaNacimiento = @Est_FechaNacimiento,
                Est_Edad = @Est_Edad,
                IdTutor = @IdTutor,
                IdCurso = @IdCurso,
                Est_CuotaMensual = @Est_CuotaMensual, 
                IdAnioEscolar = @IdAnioEscolar,
                Est_NumeroSegSocial = @Est_NumeroSegSocial,
                Est_NumeroAfiliado = @Est_NumeroAfiliado, 
                Est_CompaniaAseguradora = @Est_CompaniaAseguradora,
                Est_Estado = @Est_Estado                        
             WHERE IdEstudiante = @IdEstudiante";

    SqlCommand cmd = new SqlCommand(query, cnx);

    cmd.Parameters.AddWithValue("@Est_PrimerNombre", edtPNombre.Text);
    cmd.Parameters.AddWithValue("@Est_SegundoNombre", edtSNombre.Text);
    cmd.Parameters.AddWithValue("@Est_PrimerApellido", edtPApellido.Text);
    cmd.Parameters.AddWithValue("@Est_SegundoApellido", edtSApellido.Text);
    cmd.Parameters.AddWithValue("@Est_FechaNacimiento", Convert.ToDateTime(dtpFechaNac.Value));
    cmd.Parameters.AddWithValue("@Est_Edad", Convert.ToInt32(edtEdad.Text));
    cmd.Parameters.AddWithValue("@IdTutor", Convert.ToInt32(edtTutor.Text));
    cmd.Parameters.AddWithValue("@IdCurso", Convert.ToInt32(cbCurso.Text));
    cmd.Parameters.AddWithValue("@Est_CuotaMensual", edtCuota.Text);
    cmd.Parameters.AddWithValue("@IdAnioEscolar", Convert.ToInt32(cbAnioEscolar.Text));
    cmd.Parameters.AddWithValue("@Est_NumeroSegSocial", edtNumeroSeguroSocial.Text);
    cmd.Parameters.AddWithValue("@Est_NumeroAfiliado", edtNumeroAfiliado.Text);
    cmd.Parameters.AddWithValue("@Est_CompaniaAseguradora", edtCompaniaSeguro.Text);
    cmd.Parameters.AddWithValue("@Est_Estado", Convert.ToInt32(cbEstado.Text));
    cmd.Parameters.AddWithValue("@IdEstudiante", Convert.ToInt32(IdTemp));

    cnx.Open();
    cmd.ExecuteNonQuery();
    cnx.Close();

    MessageBox.Show("Estudiante Modificado");
}

2 个答案:

答案 0 :(得分:1)

命令超时的默认值是30秒,因此您可以增加这样的值:

cmd.CommandTimeout = `number of seconds`;

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout%28v=vs.110%29.aspx

答案 1 :(得分:0)

Giorgi已经提供了如何从SqlCommand增加超时的正确答案。

但是,我担心你的手上有一个更大的问题。执行单行更新不应在30秒后超时。如果由于表锁或行锁而导致超时,那么我将研究导致锁定的原因以及如何改进锁定。应用程序将失败,客户/用户在输入信息时将非常生气并且无法保存数据。增加超时只是一种绷带。它实际上并没有解决问题。您可以将其设置为60秒。它工作了一个月,然后你发现你需要将它设置为90,然后是120,依此类推。看到问题了?

更大的问题是,如果您没有获得锁定,但该更新语句实际上需要超过30秒才能执行。该表,服务器等出现严重错误。如果在该表上有触发更新的时候,我会研究如何提高它们的性能。您的示例只是更新单行,但是当您需要添加新列然后针对所有行运行更新脚本时会发生什么?