2016-07-02 25 views
1

我有以下代碼給出的錯誤:vb.net odp.net/如何在插入中使用ExecuteNonQuery()?

Public Function Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim oradb As String = "Data Source=fbdata;User Id=fbtrain;Password=password;" 
    Using conn As New OracleConnection(oradb) 

     Using cmd As New OracleCommand 

      conn.CreateCommand() 

      cmd.CommandText = "INSERT INTO BID " _ 
      + "(BID_ID, BID_NAME, BID_NAMEID, BID_STATUS, BID_FROM, BID_TO, BID_OWNER, NEW_USER, NEW_ZEIT, CHG_USER, CHG_ZEIT, AKTIV) VALUES " _ 
      + "(:1, :2, :2, '00', TO_DATE('01-JUL-16', 'DD-MON-RR'), TO_DATE('30-JUN-2099', 'DD-MON-RR'), '1', '1', SYSDATE, '1', SYSDATE, ' ')" 

      Dim pcountbid As New OracleParameter 
      pcountbid.OracleDbType = OracleDbType.Decimal 

      Dim pprname As New OracleParameter 
      pprname.OracleDbType = OracleDbType.Varchar2 

      pprname.Value = prname 
      pcountbid.Value = countbid 

      cmd.Parameters.Add(pcountbid) 
      cmd.Parameters.Add(pprname) 

      conn.Open() 
      Return cmd.ExecuteNonQuery() 
     End Using 
    End Using 

End Function 

的錯誤是:

InvalidOperationException異常是未處理

所有我想要做的就是結合這些價值和excecute此查詢將數據插入我的數據庫。

回答

1

使用按位置排序模式(默認情況下並按照此處所做的操作),必須按照與SQL語句中顯示的順序相同的順序將參數添加到OracleParameterCollection集合中。這意味着你實際上會擁有三個參數,儘管你的兩個參數是相同的(儘管我懷疑這個參數是否真的如此)。所以,你的代碼會變成這個樣子

cmd.CommandText = "INSERT INTO BID " _ 
    + "(BID_ID, BID_NAME, BID_NAMEID, BID_STATUS, BID_FROM, BID_TO, BID_OWNER, NEW_USER, NEW_ZEIT, CHG_USER, CHG_ZEIT, AKTIV) VALUES " _ 
    + "(:1, :2, :3, '00', TO_DATE('01-JUL-16', 'DD-MON-RR'), TO_DATE('30-JUN-2099', 'DD-MON-RR'), '1', '1', SYSDATE, '1', SYSDATE, ' ')" 

    Dim pcountbid As New OracleParameter 
    pcountbid.OracleDbType = OracleDbType.Decimal '<- ID decimal or really Int32??? 

    Dim pprname As New OracleParameter 
    pprname.OracleDbType = OracleDbType.Varchar2 

    Dim pprnameID As New OracleParameter 
    pprname.OracleDbType = OracleDbType.Int32 'change to whatever type you really need 

    pprname.Value = prname 
    pprnameID.Value = CInt(prname) 'change as needed 
    pcountbid.Value = countbid 

    cmd.Parameters.Add(pcountbid) 
    cmd.Parameters.Add(pprname) 
    cmd.Parameters.Add(pprnameID) 

不過,我想你也有一些變量類型的問題在我的評論中所指出的上方。小數對我來說沒有任何意義。您也爲BID_NAME和BID_NAMEID設置了相同的值 - 不應該是varchar2,而應該是其他數字(在Oracle中,類型爲.Net的Int32),它們是否應該是相同的值?無論如何,一旦將表列類型與變量中的表列類型進行比較,就可以根據需要進行轉換。最後,以幫助保持您的訂單直線,我的參數代碼改寫爲組像這樣

Dim pcountbid As New OracleParameter 
    pcountbid.OracleDbType = OracleDbType.Decimal '<- ID decimal or really Int32??? 
    pcountbid.Value = countbid 
    cmd.Parameters.Add(pcountbid) 

    Dim pprname As New OracleParameter 
    pprname.OracleDbType = OracleDbType.Varchar2 
    pprname.Value = prname 
    cmd.Parameters.Add(pprname) 

    Dim pprnameID As New OracleParameter 
    pprname.OracleDbType = OracleDbType.Int32 'change to whatever type you really need 
    pprnameID.Value = CInt(prname) 'change as needed 
    cmd.Parameters.Add(pprnameID) 
+0

我想都BID_NAME和BID_NAMEID有來自prname相同的字符串值。 但是,即使在將小數更改爲int32並將3組值用於綁定後,同樣的錯誤仍然存​​在。 有沒有其他想法? –

+0

@SamaanShameem您可以顯示您用於BID表的創建語句嗎? – topshot

相關問題