2011-12-21 6 views
1

次のコードはまったく実行されません。それは以前に関係する教師の指示に従って書かれ、修正されました。ポイントは、主キーが自動的に生成されるため、それがパラメータに表示されない理由です。 ID列のアイデンティティはデータベースでYesに設定されています。誰かが私のためにコードを修正できるなら、私は感謝します。データの更新方法

qry = "Update StudentDetails.Programmes set [email protected],[email protected],[email protected],[email protected] where [email protected]" 
      cmd = New SqlCommand(qry, cn) 
      cmd.Parameters.Add("@ID", SqlDbType.Int) 
      cmd.Parameters["@ID"].Value = Convert.ToInt32(txtID.Text) 
      cmd.Parameters.Add(New SqlParameter("@Programme", txtProgramme.Text)) 
      cmd.Parameters.Add(New SqlParameter("@Form", txtForm.Text)) 
      cmd.Parameters.Add(New SqlParameter("@AcademicYear", txtAcademicYear.Text)) 
      cmd.Parameters.Add(New SqlParameter("@Class", txtClass.Text)) 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.ExecuteNonQuery() 
      MessageBox.Show("Record succesfully updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information) 
+0

なぜコマンドタイプを 'StoredProcedure'に設定していますか?ストアドプロシージャを使用していません。これは通常のSQLクエリです。 –

答えて

0

クエリでパラメータ@IDを持っていますが、そのパラメータを設定していないように見えます。

主キーは自動的に作成されますが、おそらく行が挿入されている場合にのみ適用されます。 updateステートメントを使用する場合、行のIDを指定する必要があります。それがなければ、データベースはあなたが更新しようとしているデータを知らないでしょう。

コードで例外がスローされた場合(VBに例外がありますか?)、問題が何であるかを正確に伝える必要があります。また、データベースのログを追跡するのに役立つかもしれません。

+0

次の行を追加しましたが、コマンドは例外なく実行されますが、更新されることはありません。 – Akaglo

+0

正しいIDを入力してもよろしいですか? –

+0

100%確かに、サー。 – Akaglo

0

@IDもあり、あなたのSqlCommandオブジェクトのcommandTextparameterと あなたがそれを渡していません。

)(cmd.ExecuteNonQuery前に次の行を追加します。あなたのID列がアイデンティティであると述べたよう

cmd.Parameters.Add("@ID", SqlDbType.Int); 
cmd.Parameters["@ID"].Value = Convert.ToInt32(txtID.Text); 

cmd.Parameters.Add(New SqlParameter("@ID", Convert.ToInt32(txtID.Text))) 

ID列が整数型であるので、これを使用するようにしてくださいUpdateステートメントの規則に従って、Primary Keyフィールドを指定して特定の行を更新する必要があります。 ID列の値は、particular rowの識別に役立ちます。このID値は、行の一意の値です。

、任意の行が更新されていることを確認としては、ExecuteNonQuery()メソッドの戻り値を取得するには:

Int32 rowsAffected = cmd.ExecuteNonQuery(); 

、それが0以上かそうでないrowAffected値を確認してください。値が0の場合、問合せの実行時に行は発生しません。

これをチェックすると、パラメータで更新する方法を確認するlinkの例を確認できます。

+0

コマンドが今では実行されないことを追加しました – Akaglo

+0

はあなたのデータベース名である「StudentDetails」ですか?あなたの接続文字列は何ですか?接続文字列で指定したユーザーがこのデータベースにアクセスできる場合は正常に動作するはずです。それ以外の場合は、行を更新するために入力している@ID値を確認してください。 –

+0

私はセミコロンは、私の問題はまだ解決されていません。 cmd.Parameters ["@ ID"]。value = Convert.ToInt32(txtID.Text)に下線が引かれ、rowsAffectedも宣言されていません。それについてどうすればいいですか? – Akaglo

0

qry変数の内容をコピーしてSQLで実行してください 影響を受ける行が0件ある場合は、渡したキー@IDを使用して一致レコードが見つかりませんでした。あなたのクエリに

希望あなたは...

0

あなたはSqlCommand.CommandTypeプロパティを設定するのを忘れて、このヘルプをTRIMを使用しています。これは、あなたが

cmd.CommandType = CommandType.StoredProcedure; 

だけExecuteNonQuery()を呼び出す前に、それを設定してくださいに役立つことがあります。

+0

私はそれをしましたが、実行しません。コードを再チェックして助けてください。変数 'rowsAffected'は宣言されておらず、自分の状況に合うようにする方法を知りません。 – Akaglo

関連する問題