通过 Windows 表单添加到 Oracle DB

Adding to Oracle DB through Windows Form

我正在编写一个小型 Windows 应用程序,我的任务是允许系统用户通过存储过程添加、删除、更新和查看记录。我可以查看和更新​​现有记录,但无法正确添加记录。 add 函数添加 PartNo 和 Quantity 但不添加 PartName 或 Manufacturer。当我添加新部件后刷新 table 时,它们显示为零。这是我在下面添加 sub_routine 和我的存储过程。我正在使用 Oracle SQL Developer 和 Visual Studio 2015。我的语法是否正确,或者我是否遗漏了使添加方法排除 PartName 和制造商的内容。

// 向 PARTS 添加记录的子例程 table

Private Sub addPart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addPart.Click

        Dim cmd As New OracleCommand("Garage.ADDPART", Form1.Connect())
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add("@PARTNO", Val(txtAddPartNo.Text))
        cmd.Parameters.Add("@PARTNAME", Val(txtAddPartName.Text))
        cmd.Parameters.Add("@MANUFACTURER", Val(txtAddManufacturer.Text))
        cmd.Parameters.Add("@QUANTITY", Val(txtAddQuantity.Text))
        Try
            cmd.ExecuteNonQuery()
            MsgBox("Record Added")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

// ADDPART存储过程

create or replace procedure ADDPART(
new_partno PART.PARTNO%type,
new_partname PART.PARTNAME%type,
new_manufacturer PART.MANUFACTURER%type,
new_quantity PART.QUANTITY%type)
as
begin insert into PART
(PARTNO, PARTNAME, MANUFACTURER, QUANTITY)
values
(new_partno, new_partname, new_manufacturer, new_quantity);
Commit;
exception
when dup_val_on_index then
raise_application_error(-20001, 'Product already exists');
when others then
raise_application_error(-20011, sqlerrm);
END ADDPART;

鉴于您的 table partname 和 manufacturer 列是 varchar2,将对存储过程的过程调用更改为:

Private Sub addPart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addPart.Click

    Dim cmd As New OracleCommand("Garage.ADDPART", Form1.Connect())
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters.Add("@PARTNO", Val(txtAddPartNo.Text))
    cmd.Parameters.Add("@PARTNAME", txtAddPartName.Text)
    cmd.Parameters.Add("@MANUFACTURER", txtAddManufacturer.Text)
    cmd.Parameters.Add("@QUANTITY", Val(txtAddQuantity.Text))
    Try
        cmd.ExecuteNonQuery()
        MsgBox("Record Added")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

txtAddPartName.texttxtAddManufacturer.text 中移除 val() 函数。