Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ORA-01008:并非所有变量都已绑定。尽管我的查询和代码都很好,我还是不断地遇到这个错误_C#_Oracle11g - Fatal编程技术网

C# ORA-01008:并非所有变量都已绑定。尽管我的查询和代码都很好,我还是不断地遇到这个错误

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

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,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();
三件事:

  • 正如我在评论中提到的,您不会在这样的insert语句中绑定IDs/PKs。在insert而不是
    :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)
    并对所有参数执行此操作

  • 看起来表的所有参数都存在。除了我的第二点,再检查一下拼写

  • 三件事:

  • 正如我在评论中提到的,您不会在这样的insert语句中绑定IDs/PKs。在insert而不是
    :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,它不起作用)。错误说不是所有变量都被绑定,但所有变量都被绑定到它们特定的数据类型值。我添加了一个答案,其中包含了更多细节,您应该尝试不同的方法。