在oracle中插入数据时出现参数错误

error with parameters when inserting data in oracle

下午好,

几个小时以来我一直想插入 oracle,但我有一条消息提到了

参数,我正在用只有 2 列的 table 进行测试,但我找不到问题所在。

感谢任何帮助。

错误代码:ORA-01036:无效数字/变量

***数据库连接正确

***尝试不带 ID 列的插入,结果相同。

***visual studio 2019,框架 4.6.1

Imports System.Data
Imports System.Data.OracleClient
Imports System.Windows.Forms

Imports SpreadsheetLight

Public Class Form1
    <Obsolete>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim _connString As String = "Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = MYSERVER))); User Id=uss; password=password;"

    Dim sl As SLDocument = New SLDocument("C:\folder\NOMBRE.xlsx")
    Dim propiedades As SLWorksheetStatistics = sl.GetWorksheetStatistics

    Dim ultimafila = propiedades.EndRowIndex

    Using conn As OracleConnection = New OracleConnection(_connString)
        conn.Open()
        Dim ot As OracleTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)


        For i = 3 To ultimafila
            Try
                Using cmd As OracleCommand = New OracleCommand()

                    Const sql As String = "insert into TABLAPRUEBA(ID,NOMBRE) values (@ID,@NOMBRE)"
                    cmd.Connection = conn
                    cmd.Transaction = ot
                    cmd.Parameters.Add("@ID", "5")
                    cmd.Parameters.Add("@NOMBRE", Convert.ToString("test"))
                    cmd.CommandText = sql
                    cmd.ExecuteNonQuery()
                End Using
                ot.Commit()
                i = i + 1
            Catch ex As Exception
                ot.Rollback()
                MessageBox.Show("err" + ex.Message)
            End Try
        Next

    End Using

End Sub

结束Classenter code here

CREATE TABLE "myesquema"."TABLAPRUEBA" 
   (    "NOMBRE" VARCHAR2(20 BYTE), 
    "ID" VARCHAR2(20 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "myesquemaDB" ;
--------------------------------------------------------
--  DDL for Index TABLAPRUEBA_PK
--------------------------------------------------------

  CREATE UNIQUE INDEX "myesquema"."TABLAPRUEBA_PK" ON "myesquema"."TABLAPRUEBA" ("ID") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "myesquemaDB" ;
--------------------------------------------------------
--  DDL for Trigger TABLAPRUEBA_TRG
--------------------------------------------------------

  CREATE OR REPLACE TRIGGER "myesquema"."TABLAPRUEBA_TRG" 
BEFORE INSERT ON TABLAPRUEBA 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.ID IS NULL THEN
      SELECT TABLAPRUEBA_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "myesquema"."TABLAPRUEBA_TRG" ENABLE;
--------------------------------------------------------
--  Constraints for Table TABLAPRUEBA
--------------------------------------------------------

  ALTER TABLE "myesquema"."TABLAPRUEBA" MODIFY ("ID" NOT NULL ENABLE);
 
  ALTER TABLE "myesquema"."TABLAPRUEBA" ADD CONSTRAINT "TABLAPRUEBA_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "myesquemaDB"  ENABLE;

您正在对参数“@”使用 SQLSERVER 语法,但在 Oracle 中则不同,您必须使用“:”