2017-02-11 65 views
0

我有一個表,與司機的ID,姓名,等處理SQL的ExecuteNonQuery錯誤C#

我寫了從一個文本框獲得駕駛員的ID,並執行使用ExecuteNonQuery();方法查詢的方法。它檢索驅動程序的數據。但是如果用戶輸入了一個不在表格中的ID,Winforms就會關閉。

我想改爲顯示一個MessageBox或類似的錯誤,如ID不存在。我怎樣才能做到這一點?

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"; 
     } 
    } 

我想這種方式這表明我的意見河畔它partialy工作。但我有一個按鈕,多次調用該方法「comandoSQLtxtBox」!所以我得到almos 15 MessageBox。我試着把this.close();在捕獲但它不炒鍋(給出錯誤)。 ANY小費?

來電:

  //------------------------------------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/catch塊查詢,並顯示在捕獲的消息框。喜歡的東西,如:

 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

輕微抱怨,但是你應該只捕獲該catch塊中的SqlException ...除非你打算,否則絕不能捕獲所有數據。 –

+1

第二個小瑕疵:你應該在''SqlCommand''周圍使用(......){...}'塊;也不只是'SqlConnection' .... –

0

把你的數據在一個數據表中,如果特定的表具有數據,然後它會顯示出來,否則,你可以使用:

MessageBox.Show("Your Message"); 

在這之後,你可以關閉winform作者:

this.close(); 
+0

你能提供任何一個數據在一個Datatble中的數據嗎?這對我來說非常有用。謝謝! – Natarr

+0

SqlConnection Con = new SqlConnection(); Con.ConnectionString = 「您的連接字符串」 字符串str =「SELECT * FROM顧客; command.CommandText =海峽; 的DataTable dtdata =新數據表(); SqlDataAdapter的ADAP =新的SqlDataAdapter(命令); adap.Fill (dtdata); //你將以dtdata的形式獲得數據表名 –