2011-12-01 9 views
0

コードの問題がかなりあります。私は基本的なアップシェアをしようとしていますが、問題なく動作させるためにインサートコマンドを得ることができますが、選択とアップデートはうまくいっていません。私はパラメータを設定する様々な方法を試しました、そして、私がそう言えば、すべての事例/それを基礎から構築することはかなり恐ろしく失敗しました。数量増分、Upsertの問題

私はVB.Netを拾い上げ、一般に約2週間前にプログラムしています。

私が探しているのは、パラメータの設定の実際のサンプル、および/またはselect文とupdate文で間違っている可能性のあるものです。私は、問題がselect文自体ではなく、<の行に沿っていることを確信しています。>デバッグされるたびに、テーブルにデータが存在しても0のカウントを返します。現在、VBメーカーエクスプレス2010、VB.Net、およびアクセスDBを使用して

Dim sel As String = "SELECT ID FROM Stock WHERE ID = '" & txtID.Text & "'" 
    Dim cmd As New OleDbCommand(sel, conn) 
    conn.Open() 
    Try 
     cmd.ExecuteNonQuery() 
     If dt.Rows.Count < 1 Then 
      If radAdd.Checked = True Then 
       Dim dbUP As String = ("Update Stock SET Qty = Qty +1 Where ID = '" & txtID.Text & "'") 
       Dim cmdup As New OleDbCommand(dbUP, conn) 
       cmdup.ExecuteNonQuery() 
      Else 
       Dim dbDW As String = ("Update Stock SET Qty = Qty -1 Where ID = '" & txtID.Text & "'") 
       Dim cmdw As New OleDbCommand(dbDW, conn) 
       cmdw.ExecuteNonQuery() 
      End If 
     Else 
      Dim dbIns As String = "INSERT INTO Stock (ID, Qty, LastDate)"" VALUES ('" & txtID.Text & "', 1, Now())" 
      Dim dc As New OleDbCommand(dbIns, conn) 
      dc.ExecuteNonQuery() 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
    conn.Close() 
+0

あなたのコードはSQLインジェクション攻撃に対して脆弱です。 –

+0

これは、私が実際にパラメータを設定する例を探している理由です。 oldbにはたくさんの例はありません。私はSQLサーバにまだアクセスしていないので、アクセスを使用する必要があります。 – HBlakei

答えて

0

あなたは次の2行に変更されて実行する必要があります。

cmd.ExecuteNonQuery() 
If dt.Rows.Count < 1 Then 

へ: 薄暗いOValueにしますオブジェクトとして

oValue = cmd.ExecuteScalar() 
If oValue IsNot Nothing AndAlso oValue IsNot DBNull.Value Then 

これは単にseleから単一の値を取得しますctコマンドを実行し、ヌルでない場合は何かが存在するため、更新コードに入ります。レコードが存在しない場合、コードはdbnull.valueまたは何も返さず、挿入コードに進みます。

+0

この行を置換して挿入すると、返される値は{}繰り返されます。すなわち、私がデバッグに入るとき、結果は値{}のツリーの後のツリーです。したがって、条件がnullでないと常に信じているため、更新する必要があります。 Select IDとSelectの両方で試してください。* – HBlakei

+0

@HBlakei:質問の数:1)dt.Rows.Countチェックも削除したと仮定していますか? 2)デバッグでこのコードを実行すると、txtID.Textが変更されるか、常に同じになりますか? –

+0

私は両方の行を削除しました。しかし私は、この行をどのように動作させるかを設定する方法を見つけました。 の場合cmd.ExecuteScalar()IsNot Nothing Then このコードで問題が発生しますか? – HBlakei