VB.NET上的Oracle INSERT空引用异常

时间:2016-04-08 04:13:45

标签: vb.net oracle vba

请帮助我是oracle数据库的新手我用于使用mysql,我真的不知道如何调试我的代码。这是我的代码。

Imports System.Diagnostics
Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types

Public Class mainMenu

Dim conn As New OracleConnection
Private cmd As OracleCommand
Private da As OracleDataAdapter
Private cb As OracleCommandBuilder
Private ds As DataSet
Private Sub mainMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AddHandler txtProductName.TextChanged, AddressOf ValidateInputs
    AddHandler txtQty.TextChanged, AddressOf ValidateInputs
    AddHandler txtPrice.TextChanged, AddressOf ValidateInputs
    conn.ConnectionString = "User Id=antonina" & _
    ";Password=antonina" & _
    ";Data Source=xe"
    Try
        conn.Open()
    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString())
    Finally
        conn.Dispose()
    End Try
End Sub
Private Sub ValidateInputs(ByVal Sender As Object, ByVal e As EventArgs)
    Button1.Enabled = Not (txtProductName.Text = String.Empty OrElse txtQty.Text = String.Empty OrElse txtPrice.Text = String.Empty)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim productName As String
    Dim qty As Integer
    Dim price As Integer
    Dim cat As String
    productName = txtProductName.Text
    qty = Integer.Parse(txtQty.Text)
    price = Integer.Parse(txtPrice.Text)
    cat = cmbCat.Text
    conn = New OracleConnection("User Id=antonina;Password=antonina;Data Source=xe")
    da = New OracleDataAdapter()
    Try
        da.InsertCommand = New OracleCommand("INSERT INTO INVENTORY(INVENTORY_PRODUCTNAME,INVENTORY_CAT,INVENTORY_QTY,INVENTORY_PRICE) VALUES ('" & productName & "'," & qty & "," & price & ",'" & cat & "')", conn)
        Debug.WriteLine("Success")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
End Class

当我单击我的add按钮时,它表示对象引用未设置为对象的实例。我知道我可能只有一个愚蠢的语法错误。请帮帮我。

我确信我的所有变量都有值。我也在使用oracle 10g

2 个答案:

答案 0 :(得分:1)

我从未见过有人使用OracleDataAdapter来向数据库插入任何东西,通常OracleDataAdapter用于从数据库中检索数据,即SELECT ...命令或函数调用获得RefCursor。

也许InsertCommand,或者。 UpdateCommandDeleteCommand用于修改数据库中填充后的OracleDataAdapter数据 - 我不知道,我从未使用过它。使用方法OracleDataAdapter.Update(da)

调用这些命令

无论如何,通常你会这样做:

Dim cmd As OracleCommand
cmd = New OracleCommand("INSERT INTO INVENTORY (INVENTORY_PRODUCTNAME,INVENTORY_QTY,INVENTORY_PRICE,INVENTORY_CAT) VALUES (:productName, :qty, :price, :cat)", conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("productName", OracleDbType.Varchar2, ParameterDirection.Input).Value = productName 
cmd.Parameters.Add("qty", OracleDbType.Int32, ParameterDirection.Input).Value = qty 
cmd.Parameters.Add("price", OracleDbType.Int32, ParameterDirection.Input).Value = price
cmd.Parameters.Add("cat", OracleDbType.Varchar2, ParameterDirection.Input).Value = cat
cmd.ExecuteNonQuery()

请注意列的顺序,请参阅代码:

      INVENTORY_PRODUCTNAME,   INVENTORY_CAT,   INVENTORY_QTY,    INVENTORY_PRICE
('" & productName & "'," &     qty & "," &      price & ",'" &    cat & "')"

答案 1 :(得分:0)

我假设da适用于DataAdapter。您需要首先通过调用其构造函数来实例化您的dataadapter。

conn = new OracleConnection(yourConnectionString)
da = New OracleDataAdapter()
da.InsertCommand = New OracleCommand("INSERT INTO INVENTORY(INVENTORY_PRODUCTNAME,INVENTORY_CAT,INVENTORY_QTY,INVENTORY_PRICE) VALUES ('" & productName & "'," & qty & "," & price & ",'" & cat & "')", conn)

另外,你错过了'()'在sql语法中的VALUES语句之后。

其他事情可能会有所帮助,您可以将解析语句移动到try-catch元素中以避免错误。

希望这有帮助。