2012-03-03 4 views
0

輸入System.Data.SqlClientのVB-SQL、SELECT文の

パブリック・クラスたForm3

Private cs As New SqlConnection("Data Source=HUSAIN-PC;Initial 

カタログ= final1の例外;統合セキュリティ=真」)

Private da As New SqlDataAdapter 
Private ds As New DataSet 
Public dr As SqlDataReader 
Public cmd As New SqlCommand 
Private sql As String 
Private sqlsel As String 
Dim Bal As String 
Dim id As String 
Dim amt As String 

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    cs.Open() 
    cmd.Connection = cs 
    amt = TextBox2.Text 
    id = TextBox1.Text 
    sqlsel = "SELECT (Bal) FROM db5 WHERE Id='" + id + "'" 
    da.InsertCommand = New SqlCommand(sqlsel, cs) 
    dr = cmd.ExecuteReader 
    If dr.HasRows = True Then 
     While (dr.Read()) 
      Bal = dr("Id") 
     End While 
    End If 
    dr.Close() 
    MessageBox.Show("Balance is :" + Bal) 

    Dim total As String = Bal + amt 

    sql = "UPDATE db5 SET Bal='" + total + "' WHERE Id='" + id + "'" 
    da.InsertCommand = New SqlCommand(sql, cs) 
    da.InsertCommand.ExecuteNonQuery() 
    MessageBox.Show("updated") 
End Sub 

エンドクラス

これは私のVBコードでSQL DBから値を取得するためのものです... Update文はうまく動作しています DR = cmd.ExecuteReader "のExecuteReader:CommandTextをプロパティが初期化されていない" このコードで

+0

他のものとは別に、*このようにSQLをビルドしないでください。あなたはSQLインジェクション攻撃のために広く開いています。パラメータ化されたSQLを使用してください。 –

答えて

0

ルック:

sqlsel = "SELECT (Bal) FROM db5 WHERE Id='" + id + "'" 
da.InsertCommand = New SqlCommand(sqlsel, cs) 
dr = cmd.ExecuteReader 

君はInsertCommandを指定している私は、コードで例外を取得LECT SELECTクエリを実行すると、エラーメッセージごとにクエリが設定されていない完全に別のSqlDataReader ...にExecuteReaderが呼び出されています。

あなたは、この特定のエラーを取得している理由ですが、このコードで問題のたくさんあります

  • は、クエリを実行するたびにあなたがなどSqlConnection/SqlCommand新しいを作成する必要がありますあなたは自動的に
  • それらを閉じるためにUsingステートメントを使用する必要があります
  • あなたはこれらのためにインスタンス変数を持つべきではない - 彼らはローカル変数でなければなりません
  • 私は最初の場所でここDataAdapterを使用する理由を見ない - ちょうどSqlCommand.ExecuteNonQuery
  • 非常に重要なを使用して:あなたはパラメータ化されたSQLを使用しての代わりに、あなたのSQLで直接値を含むべきです。このトピックの詳細については、Bobby Tablesサイトを参照してください。
+0

病気のすべてを考慮に入れて... thnxたくさんの4URLの助けを捧げる....ちょうど私はワットの変更は、コードの一部を実行するために行う必要があります助けることができる? "da.InsertCommand =新しいSqlCommand(sqlsel、cs)"というステートメントを削除しようとしましたが、それでもまだ動作していません.... thnk u :) – iHusainM

+0

@ user997580:変更する必要があることを伝えました。 *一時的に動作させるために最小限の変更を加えないでください。上の手順の* all *の後に*正しく*修正してください。あなたのコードを見て、どのオブジェクトが関係しているかを調べてください。あなたが理解できないコードで終わると、それは実際にあなたを助けません。 –