2015-04-23 2 views
1

Я пытаюсь изменить таблицу в своей базе данных, но когда дело доходит до выбора работы около тридцати секунд, осталось зацепиться, а затем представляет ошибку тайм-аута. Я использую Sql-сервер 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"); 
} 
+4

Установить cmd.CommandTimeout на что-то> 30. –

+1

Это не должно занимать больше 30 секунд. Я могу только представить себе кошмар триггеров и столовых замков, которые когда-либо будут причиной этого. – TyCobb

+0

Я не знаю, решит ли это вашу проблему, но ваши 'SqlConnection' и' SqlCommand' должны находиться в 'использовании' блоков. –

ответ

0

Giorgi уже предоставил правильный ответ о том, как увеличить тайм-аут от SqlCommand.

Тем не менее, я боюсь, что у вас есть гораздо больший вопрос на ваших руках из того, что я вижу. Выполнение обновления одной строки не должно истекать через 30 секунд. Если вы получаете тайм-ауты из-за блокировки таблиц или строк, я бы изучил, что именно вызывает блокировку и как ее улучшить. Приложения будут терпеть неудачу, и пользователи/пользователи будут очень безумны, когда они войдут в информацию и не смогут сохранить данные. Увеличение таймаута - просто повязка. Это фактически не решает проблему. Вы можете установить его на 60 секунд. Он работает в течение месяца, а затем вы обнаружите, что вам нужно установить его на 90, затем 120 и так далее. См. Проблему?

Еще более серьезная проблема заключается в том, что вы не получаете блокировки, но этот оператор обновления фактически занимает более 30 секунд для выполнения. Что-то серьезно не так с этой таблицей, сервером и т. Д. Если в этой таблице есть триггеры, когда возникают обновления, я бы посмотрел, как повысить их производительность. Ваш пример просто обновляет одну строку, но что происходит, когда вам нужно добавить новый столбец, а затем запустить скрипт обновления для всех строк?

Смежные вопросы