2011-07-02 111 views
3
cmd.CommandText = "select * from product where prod_code='" & Trim(txtprod_code.Text) & "' and branch='" & w_location & "' and avail_stock <>" & (0) & "" 
cmd.CommandType = CommandType.Text 
con.Open() 
da_uqc.SelectCommand = cmd 
cmd.Connection = con 
da_uqc.Fill(ds_uqc) 
m_qty = ds_uqc.Tables(0).Rows(0)(4) 'error 
da_uqc.Dispose() 
ds_uqc.Dispose() 
cmd.Dispose() 

このように与えることは可能ですかm_qty = ds_uqc.Tables(0).Rows(0)(4)?あなたは、クエリ文字列は、任意の一致する行を取得していないので、全くのテーブルに行がなかったことを示すランタイムエラーを取得している位置0に行がありません

+0

は1ベースの言語ではありませんか?私はそれを使用して以来、それは確かに覚えていないことがあります。 –

+0

@vignesh:あなたの質問が結果を返すことを確認してください – Devjosh

+1

@jcomeau_ictx:vb配列では1ベースですがvb.netでは0ベースです:) – Devjosh

答えて

5

、あなたは行を確認することが最初のカウント:

If ds_uqc.Tables(0).Rows.Count > 0 then 
    m_qty = ds_uqc.Tables(0).Rows(0)(4) 
End If 

PS:VB.Netのコメントは、'で始まり、C#.Netではなく、//で始まります。

+0

次回は訂正します – vignesh

+0

m_qtyデータベースから数量を取得し、その値をその変数に代入しています – vignesh

2

これは、一致する商品/ etcがなかったため、ローがロードされていないことを示しています。これは大文字と小文字を区別する問題でも、真にそのような製品が存在しない可能性もあります。

入力の連結を使用してIS BADです。データエラー(名前に引用符を付けるとき)を避けるために、より重要なのはSQLインジェクションを避けるために、いつもパラメータ化されたコマンドを好むべきです。

関連する問題