2011-05-03 88 views
0

我有一些問題得到一個查詢運行基於掀起另一查詢。這是數據庫圖給出一點背景。所有表的主鍵都是由標識自動生成的。前兩個插入語句(Donation和Food_Donation)可以工作,但我無法將最後一個插入到Donation_Details中來工作。這裏是到目前爲止的代碼:多if語句,然後,或者?

Dim con As New OleDbConnection(DBcon) 

Try 
    Dim dr As OleDbDataReader 
    Dim command As New OleDbCommand("Insert into Donation (Donor_ID) VALUES (" & txtDonNum.Text & "); Select @@Identity;") 

    con.Open() 
    command.Connection = con 
    dr = command.ExecuteReader 
    Dim Donation_ID As String = "" 
    If dr.Read() Then 
     Donation_ID = dr(0).ToString 
     Dim food As New OleDbCommand("Insert into Food_Donation (Date_Received, Donation_ID) Values ('" & maskedreceived.Text & "', " & Donation_ID & "); Select @@Identity") 
     food.Connection = con 
     food.ExecuteNonQuery() 
    End If 

    Dim Food_ID As String = "" 
    If dr.Read() Then 

     Food_ID = dr(0).ToString 
     Dim food2 As New OleDbCommand("Insert into Donation_Details (Quantity, Unit, Expiration_Date, Food_ID, Storage_ID, Type_ID) Values (" & txtQuantity.Text & ", '" & boxUnit.Text & "', '" & maskedexpire.Text & "', " & Food_ID & ", " & txtStorageID.Text & ", " & txtTypeID.Text & ")") 
     food2.Connection = con 
     food2.ExecuteNonQuery() 

    End If 


Catch ex As Exception 

    MessageBox.Show(ex.Message) 
Finally 
    con.Close() 
End Try 

末次

我相當改正我的SQL語句是正確的,它只是最後的陳述是否需要是如果還是其他什麼東西。

+1

小Bobby表將引以爲豪。 http://xkcd.com/327/。您應該使用參數化查詢。 – Thomas 2011-05-03 23:32:03

回答

0

如果您想重複使用dr獲取Food_ID,您應該使用dr = food.ExecuteReader()而不是food.ExecuteNonQuery()

+0

修復它,謝謝! – Brian 2011-05-04 02:12:07

0

我懷疑你的問題是,你正在使用If dr.Read()兩次。

dr.Read()方法將向前移動閱讀到下一行,但你只能選擇在您的初始查詢單個值。

因此,舉例來說,你的讀者(被從插入製造)將返回單行值的插入成功。調用Read()它會成功,但隨後將行光標移動到EOF導致後續Read()調用返回FALSE