2017-04-06 26 views
-3

私が更新プログラムを作成する際に助けてくださいエラーが発生しました!更新中にMySqlExceptionが処理されませんでした

bdDataSet = new DataSet(); 
//Define string de conexão 
bdConn = new MySqlConnection("Server=xxxxxxxxx;Database=xxxxxxx;Uid=xxxxxxx;Pwd=xxxxxxxx"); 
var command = bdConn.CreateCommand(); 
//Abre conecção 
try 
{ 
    bdConn.Open(); 
} 
catch 
{ 
    MessageBox.Show("Impossível estabelecer conexão"); 
} 
//Verifica se a conexão está aberta 
if (bdConn.State == ConnectionState.Open) 
{ 
    //ENCONTRA USUARIO 
    command.CommandText = "SELECT * FROM users WHERE [email protected] and [email protected]"; 
    command.Parameters.Add("@email", MySqlDbType.VarChar).Value = textBoxUser.Text; 
    command.Parameters.Add("@senha", MySqlDbType.VarChar).Value = textBoxPass.Text; 
    MySqlDataReader reader = command.ExecuteReader(); 
    if (reader.Read()) 
    { 
     string email = reader.GetString("email"); 
     if (Convert.IsDBNull(reader["hd_id"])) 
     { 
      //ADD HD ID NO D 


      MySqlCommand sql2 = new MySqlCommand("UPDATE users SET [email protected] WHERE [email protected]", bdConn); 
      sql2.Parameters.Add("@hdid", MySqlDbType.VarChar).Value = HardDrive.GetHDDSerialNo(); 
      sql2.Parameters.Add("@email", MySqlDbType.VarChar).Value = email; 
      sql2.ExecuteReader(); 
     } 
     if (reader.GetString("hd_id") != null) 
     { 
      MessageBox.Show("Tem HD"); 
     } 
    } 
    else 
    { 
     MessageBox.Show("Usuários e/ou Senha Invalido"); 
    } 

    bdConn.Close(); 
} 

ので、私は、この行でエラー

sql2.ExecuteReader(); 

この問題を解決するのですhelpeしてくださいを持っています!私の英語のために申し訳ありません私はブラジル出身です。私はこのクエリを行うためにすべてを試しましたが、あなたの誰もが私を助けることができないことを願っています!

+0

あなたはエラーが何であるかを私たちに伝えるために持っている「というエラーが表示されます」いつでも。 –

+0

何がエラーですか? –

答えて

1

ここでは2番目のクエリの場合、sql2.ExecuteReader();の代わりにsql2.ExecuteNonQuery();を使用する必要があります。

ExecuteNonQuery()(たとえば、 は、データベースの構造を照会またはデータベース・オブジェクトをテーブル等 を作成)カタログ操作を実行する、またはUPDATEを実行することにより データセットを使用せずに、データベース内のデータを変更するために、INSERT 、またはDELETEステートメント。そして、このメソッドは、影響を受ける行の数を返します。

ExecuteReader()は、結果セット全体を反復処理できるオブジェクトを返します。

コメントは、ExecuteNonQueryのためにエラーが発生していないことを示しています。以前のDatareaderのためです。そのため、更新を処理する前に閉じる必要があります。

+1

ポスターがなぜこれを行うべきなのかを説明したなら、それは単なるコピー/ペーストソリューションではなく情報を提供するので、はるかに良い答えでしょう。これはポスターがこの同じエラーを将来回避するのに役立ちます。 –

+0

私はすでに試しましたが、うまくいきません!次の図を参照してください。http://prntscr.com/eszl0g –

+0

エラーメッセージは、何をすべきかを示しています。以前の接続を閉じるには、 'DataReader'を使用していました。 –

0

あなたはDatareaderを使用しています。データウェアハウスは、接続が閉じられるまで接続を開いたままにします。データ・リーダー用の接続を使用する場合は、Execute Non問合せでは使用できません。

更新のための新しい接続とコマンドオブジェクトを作成する方がよい。

https://www.codeproject.com/Articles/43438/Connect-C-to-MySQL

+0

どうすればいいですか?あなたは私を助けることができますか?、私は行に返される値が必要です。 –

関連する問題