2017-02-11 6 views
0

У меня есть таблица с ID водителя, имя, фамилия и т.д.Обработка ошибок SQL ExecuteNonQuery C#

Я написал метод, который получает идентификатор водителя из текстового поля и выполняет запрос, используя метод ExecuteNonQuery();. Он извлекает данные драйвера. Но если пользователь вводит идентификатор, который отсутствует в таблице, Winforms закрываются.

Я бы хотел вместо этого отобразить MessageBox или что-то подобное, например ошибку, которая не существует. Как я могу это сделать?

EDDIT

public string comandoSQLtxtBox(string comando) 
    { 
     string datosConexion = "Data Source=JNATARIO-PC;Initial Catalog= viajesDB;Integrated Security=True;"; 
     try 
     { 
      using (SqlConnection con = new SqlConnection(datosConexion)) 
      { 
       con.Open(); 
       SqlCommand comandoCreartabla = new SqlCommand(comando, con); 
       object scalarobject; 
       scalarobject = comandoCreartabla.ExecuteScalar(); 
       con.Close(); 
       return scalarobject.ToString(); 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Ocurrio un error!"); 
      return "0"; 
     } 
    } 

Я попробовал тот путь, который предложил мне в комментариях над его частично работал. Но у меня есть кнопка, которая много раз вызывает этот метод «comandoSQLtxtBox» !, поэтому я получаю almos 15 MessageBox. Я попытался поставить this.close(); в улове, но он не wok (дает ошибку). Любой совет?

Призывы:

  //------------------------------------DATOS CHOFER----------------------------------------- 
     //ID chof 
     string Id_chofer = sqlTools.comandoSQLtxtBox("SELECT id_chofer FROM viajes WHERE id_viaje=" + Id_viaje); 
     boxIDChofViajeCurso.Text = Id_chofer; 
     //Nombre chof 
     boxNombreChofCurso.Text = sqlTools.comandoSQLtxtBox("SELECT nombre FROM choferes WHERE id_chofer=" + Id_chofer); 
     //Apellido chof 
     boxApellChofCurso.Text = sqlTools.comandoSQLtxtBox("SELECT apellido FROM choferes WHERE id_chofer=" + Id_chofer); 
     //Telefono 
     boxTlfChofCurso.Text = sqlTools.comandoSQLtxtBox("SELECT telefono FROM choferes WHERE id_chofer=" + Id_chofer); 
     //Comentarios 
     boxRichComChofCurso.Text = sqlTools.comandoSQLtxtBox("SELECT comentarios_chofer FROM choferes WHERE id_chofer=" + Id_chofer); 

     //--------------------------------------DATOS AUTO------------------------------------------- 
     //ID auto 
     string Id_auto = sqlTools.comandoSQLtxtBox("SELECT id_auto FROM viajes WHERE id_viaje=" + Id_viaje); 
     boxIDAutoCurso.Text = Id_auto; 
     //Marca 
     boxMarcaCurso.Text = sqlTools.comandoSQLtxtBox("SELECT marca FROM autos WHERE id_auto=" + Id_auto); 
     //Modelo 
     boxModeloCurso.Text = sqlTools.comandoSQLtxtBox("SELECT modelo FROM autos WHERE id_auto=" + Id_auto); 
     //Patente 
     boxPatenteCurso.Text = sqlTools.comandoSQLtxtBox("SELECT patente FROM autos WHERE id_auto=" + Id_auto); 
     //Año 
     boxAnAutoCurso.Text = sqlTools.comandoSQLtxtBox("SELECT año FROM autos WHERE id_auto=" + Id_auto); 
     //Comentarios 
     boxRichComAutoCurso.Text = sqlTools.comandoSQLtxtBox("SELECT comentarios_auto FROM autos WHERE id_auto=" + Id_auto); 
+1

Вы можете указать код? – Usman

ответ

1

Поместите свой запрос в Try/поймать блок, и показать MessageBox в улове. Нечто подобное, например:

 try 
     { 
      using (SqlConnection connection = new SqlConnection(
      connectionString)) 
      { 
       SqlCommand command = new SqlCommand(queryString, connection); 
       command.Connection.Open(); 
       command.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show("An error occurred: " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
+2

Незначительная ручка, но вы должны поймать только SqlException в этом блоке catch ... Никогда не ловите всех, если не намереваетесь. –

+1

Вторая второстепенная задача: вы должны поместить 'using (...) {...}' блоки вокруг 'SqlCommand'; тоже - не только 'SqlConnection' .... –

0

Возьмите ваши данные в одном DataTable, и если этот конкретный DataTable есть данные, то это будет показано ниже, в противном случае вы можете использовать:

MessageBox.Show("Your Message"); 

После этого вы можете закрыть winform:

this.close(); 
+0

Не могли бы вы представить какой-либо пример для взятия данных в одном Datatble, пожалуйста? Это будет очень полезно для меня. Благодаря! – Natarr

+0

SqlConnection Con = новый SqlConnection(); Con.ConnectionString = "Ваше подключение Строка" Str String = «SELECT * FROM Customer; command.CommandText = Str; DataTable dtdata = новый DataTable(); SqlDataAdapter УРАФ = новый SqlDataAdapter (команда); adap.Fill (dtdata); // Вы получите данные в именах данных как dtdata –

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