在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 中则不同,您必须使用“:”
下午好,
几个小时以来我一直想插入 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 中则不同,您必须使用“:”