我正在尝试修改数据库中的一个表,但是当选择运行大约三十秒时会挂起,然后出现超时错误。我正在使用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");
}
答案 0 :(得分:1)
命令超时的默认值是30秒,因此您可以增加这样的值:
cmd.CommandTimeout = `number of seconds`;
答案 1 :(得分:0)
Giorgi已经提供了如何从SqlCommand增加超时的正确答案。
但是,我担心你的手上有一个更大的问题。执行单行更新不应在30秒后超时。如果由于表锁或行锁而导致超时,那么我将研究导致锁定的原因以及如何改进锁定。应用程序将失败,客户/用户在输入信息时将非常生气并且无法保存数据。增加超时只是一种绷带。它实际上并没有解决问题。您可以将其设置为60秒。它工作了一个月,然后你发现你需要将它设置为90,然后是120,依此类推。看到问题了?
更大的问题是,如果您没有获得锁定,但该更新语句实际上需要超过30秒才能执行。该表,服务器等出现严重错误。如果在该表上有触发更新的时候,我会研究如何提高它们的性能。您的示例只是更新单行,但是当您需要添加新列然后针对所有行运行更新脚本时会发生什么?