2017-02-11 15 views
0

私はテキストボックスからドライバのIDを取得し、ExecuteNonQuery();方法を使用してクエリを実行する方法を書いたなどハンドルのSQLは、ExecuteNonQueryエラーがC#

ドライバーのID、名前、姓、とテーブルを持っています。ドライバのデータを取得します。しかし、ユーザーがテーブルにない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働いコメントNADで私を示唆方法を試してみました。しかし、私はそのメソッド "comandoSQLtxtBox"を何度も呼び出すボタンを持っているので、私はalmos 15 MessageBoxを取得します。私はthis.close()を入れてみました。漁獲量ではあるが、漁獲していない(誤差を与える)。何か先端?

CALLS:

  //------------------------------------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

第2のマイナーグリップ: '(using){...}'ブロックを 'SqlCommand'の周りに置くべきです。 'SqlConnection'だけでなく.... –

0

一つのDataTableにデータを取り、その特定のデータテーブルにデータを持っているならば、それはそうでなければ、使用することができ、表示されます。この後

MessageBox.Show("Your Message"); 

あなたは閉じることができますwinform by:

this.close(); 
+0

データを1つのDatatbleで取得するための例を教えてください。それは私のために非常に便利です。ありがとう! – Natarr

+0

SqlConnection Con =新しいSqlConnection(); command.CommandText =のStr; のDataTable DTDATA =新しいDataTableを(); = "あなたの接続文字列" 文字列のStr =「お客様SELECT * FROM Con.ConnectionString SqlDataAdapterオブジェクトのADAP =新しいSqlDataAdapterオブジェクト(コマンド); adap.Fill (dtdata); //データをdtdataというデータテーブル名で取得します –

関連する問題