C# ORA-01008:并非所有变量都已绑定。尽管我的查询和代码都很好,我还是不断地遇到这个错误
Oracle的表创建代码C# ORA-01008:并非所有变量都已绑定。尽管我的查询和代码都很好,我还是不断地遇到这个错误,c#,oracle11g,C#,Oracle11g,Oracle的表创建代码 CREATE TABLE "STUDENTS" ( "S_ID" NUMBER NOT NULL ENABLE, "USERNAME" VARCHAR2(20) NOT NULL ENABLE, "FULL_NAME" VARCHAR2(25) NOT NULL ENABLE, "EMAIL" VARCHAR2(40), "CONTACT_NO" VARCHAR2(25), "GENDER" NUMBER(1
CREATE TABLE "STUDENTS"
(
"S_ID" NUMBER NOT NULL ENABLE,
"USERNAME" VARCHAR2(20) NOT NULL ENABLE,
"FULL_NAME" VARCHAR2(25) NOT NULL ENABLE,
"EMAIL" VARCHAR2(40),
"CONTACT_NO" VARCHAR2(25),
"GENDER" NUMBER(1,0),
"STATUS" NUMBER(1,0),
"ADMISSION_DATE" DATE,
"ADMISSION_NO" NUMBER,
"FATHER_NAME" VARCHAR2(25),
"MOTHER_NAME" VARCHAR2(25),
"DATE_OF_BIRTH" DATE,
"NATIONALITY" VARCHAR2(15),
"RELIGION" VARCHAR2(15),
"CLASS_NO" VARCHAR2(5),
"SECTION_NAME" VARCHAR2(10),
"S_ROLL_NO" VARCHAR2(15),
"PASSWORD" VARCHAR2(16) NOT NULL ENABLE,
"GUARDIAN_FULL_NAME" VARCHAR2(25) NOT NULL ENABLE,
"GUARDIAN_CONTACT_NO" VARCHAR2(25) NOT NULL ENABLE,
"GUARDIAN_ADDRESS" VARCHAR2(40) NOT NULL ENABLE,
"PRE_SCHOOL" NUMBER(1,0),
"PRIMARY" NUMBER(1,0),
"MIDDLE" NUMBER(1,0),
"MIDDLE_YEAROFPASS" VARCHAR2(10),
"MIDDLE_INSTITUTION" VARCHAR2(50),
"HIGH_SCHOOL_SSC" NUMBER(1,0),
"SSC_YEAROFPASS" VARCHAR2(10),
"SSC_INSTITUTION" VARCHAR2(50),
"HIGHER_SECONDARY_HSSC" NUMBER(1,0),
"HSSC_YEAROFPASS" VARCHAR2(10),
"HSSC_INSTITUTION" VARCHAR2(50),
"IMAGE" BLOB,
CONSTRAINT "STUDENTS_PK" PRIMARY KEY ("S_ID", "USERNAME") ENABLE
);
ALTER TABLE "STUDENTS"
ADD CONSTRAINT "STUDENTS_SECTION_NAME_FK"
FOREIGN KEY ("SECTION_NAME")
REFERENCES "SECTIONS" ("SECTION_NAME") ENABLE;
图像转换
FileStream file = new FileStream(imgpath, FileMode.Open,
FileAccess.Read);
BinaryReader br = new BinaryReader(file);
FileInfo info = new FileInfo(imgpath);
byte[] imgData = br.ReadBytes((int)file.Length);
学生注册
cmd.Connection = con;
要插入到students表中的Oracle查询
cmd.CommandText = "insert into HRM.students values(:s_id, :username,
:full_name, :email, :contact_no, :gender, :status" +
", :admission_date, :admission_no, :father_name, :mother_name,
:date_of_birth, :nationality, :religion, :class_no, :section_name" +
", :s_roll_no, :password, :guardian_full_name, :guardian_contact_no,
:guardian_address, :pre_school, :primary_school, :middle" +
", :middle_yearofpass, :middle_institution, :high_school_ssc,
:ssc_yearofpass, :ssc_institution, :higher_secondary_hssc" +
", :hssc_yearofpass, :hssc_institution, :image)";
string DOB = usr_DOB.Value.Date.ToString("dd-MMM-yyyy");
添加参数时,所有指定的表参数都添加了替换值,无法找出导致错误的参数
cmd.Parameters.Add("s_id", GenerateNewID());
GenerateNewID()
方法只是简单地获取一个计数器,用于先前的准入,并添加1,然后返回newID
cmd.Parameters.Add("username", usr_name.Text);
cmd.Parameters.Add("full_name", usr_fullname.Text);
cmd.Parameters.Add("email", usr_email.Text);
cmd.Parameters.Add("contact_no", usr_contactNo.Text);
cmd.Parameters.Add("gender", genderVal);
cmd.Parameters.Add("status", StatusVal);
状态(启用/错误)、性别和其他一些变量根据二进制条件计算为0或1,其中只有两个选项可用
cmd.Parameters.Add("admission_date", dated);
cmd.Parameters.Add("admission_no", GenerateNewID());
cmd.Parameters.Add("father_name", usr_fathername.Text);
cmd.Parameters.Add("mother_name", usr_mothername.Text);
cmd.Parameters.Add("date_of_birth", DOB);
cmd.Parameters.Add("nationality", usr_nationality.Text);
cmd.Parameters.Add("religion", usr_religion.Text);
cmd.Parameters.Add("class_no", usr_Class.Text);
cmd.Parameters.Add("section_name", usr_assignedSection.Text);
cmd.Parameters.Add("s_roll_no", GenerateNewID());
cmd.Parameters.Add("password", password);
cmd.Parameters.Add("guardian_full_name", usr_GuardianName.Text);
cmd.Parameters.Add("guardian_contact_no", usr_GuardianContactNo.Text);
cmd.Parameters.Add("guardian_address", usr_GuardianFullAddress.Text);
cmd.Parameters.Add("pre_school", preVal);
cmd.Parameters.Add("primary_school", primaryVal);
cmd.Parameters.Add("middle", midVal);
cmd.Parameters.Add("middle_yearofpass", usr_middle_yearOfPass.Text);
cmd.Parameters.Add("middle_institution", usr_middle_insititution.Text);
cmd.Parameters.Add("high_school_ssc", secondaryVal);
cmd.Parameters.Add("ssc_yearofpass", usr_ssc_yearOfPass.Text);
cmd.Parameters.Add("ssc_institution", usr_secondary_insititution.Text);
cmd.Parameters.Add("higher_secondary_hssc", higherSecondaryVal);
cmd.Parameters.Add("hssc_yearofpass", usr_hssc_yearOfPass.Text);
cmd.Parameters.Add("hssc_institution",
usr_HighSecondary_institution.Text);
cmd.Parameters.Add("image", (Object)imgData);
con.Open();
执行
cmd.ExecuteNonQuery();
con.Close();
三件事:
:s_id
中使用序列名称。nextval
,尽管您希望用用于增加PK值的序列名称替换序列名称。由于您正在执行原始SQL
,而不是使用类似实体框架的东西,因此可能需要显式引用序列。或者,您可以尝试完全排除ID
。我不是100%确定,所以您必须对此进行测试,但是如果您不引用它,Oracle可能会为您执行自动递增工作(在这种情况下,它会成为纯粹的首选项;我个人喜欢将它显式添加到命令中)
cmd.parameters.Add(“hssc\u yearofpass”,usr\u hssc\u yearofpass.Text)绑定参数时
您需要在第一个参数(参数名称)中包含:
。所以您应该有cmd.Parameters.Add(“:hssc\u yearofpass”,usr\u hssc\u yearofpass.Text)
并对所有参数执行此操作:s_id
中使用序列名称。nextval
,尽管您希望用用于增加PK值的序列名称替换序列名称。由于您正在执行原始SQL
,而不是使用类似实体框架的东西,因此可能需要显式引用序列。或者,您可以尝试完全排除ID
。我不是100%确定,所以您必须对此进行测试,但是如果您不引用它,Oracle可能会为您执行自动递增工作(在这种情况下,它会成为纯粹的首选项;我个人喜欢将它显式添加到命令中)
cmd.parameters.Add(“hssc\u yearofpass”,usr\u hssc\u yearofpass.Text)绑定参数时
您需要在第一个参数(参数名称)中包含:
。所以您应该有cmd.Parameters.Add(“:hssc\u yearofpass”,usr\u hssc\u yearofpass.Text)
并对所有参数执行此操作我认为您不想将PK绑定为参数。我假设您正在使用序列和触发器来自动增加值,因为这是Oracle。因此,在查询的第一部分
“insert into HRM.students values(:s_id,
您应该将其更改为”insert into HRM.students values(SEQUENCE_NAME.nextval,
),然后删除此项:cmd.Parameters.Add(“s_id”,GenerateNewID())
我在viusal studio中使用Oracle客户端连接了Oracle数据库,我正在尝试注册一名学生,但当我执行指定的查询时,它抱怨并非所有指定的参数都已绑定,但所有参数确实已绑定,并在添加参数时被其值替换。问题是我无法我无法准确地确定是哪个参数导致了这个问题……我仍然得到相同的错误“insert into HRM.students values”(SEQUENCE_NAME.nextval,它不起作用错误表示并非所有变量都绑定,但所有变量都绑定到其特定的数据类型值我添加了一个答案,其中包含了更多细节和您应该尝试的不同内容。我认为您不想将PK绑定为参数。我假设您正在使用序列和触发器自动递增值,因为这是Oracle。因此在查询的第一部分“插入HRM.students值(:s_id,
您应该将其更改为”插入HRM.students值(SEQUENCE_NAME.nextval,
),然后删除此:cmd.Parameters.Add(“s_id”,GenerateNewID())
我在viusal studio中使用Oracle客户端连接了Oracle数据库,我正在尝试注册一名学生,但当我执行指定的查询时,它抱怨并非所有指定的参数都已绑定,但所有参数确实已绑定,并在添加参数时被其值替换。问题是我无法我还没有确定到底是哪个参数导致了这个问题……我仍然得到了相同的错误“插入到HRM.students值中(SEQUENCE_NAME.nextval,它不起作用)。错误说不是所有变量都被绑定,但所有变量都被绑定到它们特定的数据类型值。我添加了一个答案,其中包含了更多细节,您应该尝试不同的方法。