ORA-01008: не все переменные связаны. Я продолжаю получать эту ошибку, хотя мой запрос и код в порядке - PullRequest
1 голос
/ 07 июня 2019

Код создания таблицы для 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;

Запрос 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();

1 Ответ

0 голосов
/ 07 июня 2019

Три вещи:

  1. Как я уже упоминал в комментарии, вы не привязываете идентификаторы / PK в таком выражении вставки.Во вставке вместо :s_id используйте SEQUENCE_NAME.nextval, хотя вы захотите заменить SEQUENCE_NAME на имя последовательности, используемой для увеличения значения PK.Поскольку вы выполняете raw SQL вместо использования чего-то вроде Entity Framework, вам, возможно, придется явно ссылаться на последовательность.В качестве альтернативы, вы можете просто исключить ID.Я не уверен на 100%, поэтому вам придется протестировать это, но Oracle может выполнить автоинкрементную работу за вас, если вы не ссылаетесь на нее (что в этом случае становится просто предпочтением; лично мне нравится, когда она явно добавляется вкоманда).

  2. Когда вы связываете параметры с cmd.Parameters.Add("hssc_yearofpass", usr_hssc_yearOfPass.Text);, вам необходимо включить : в первый параметр (имя параметра).Таким образом, вы должны иметь cmd.Parameters.Add(":hssc_yearofpass", usr_hssc_yearOfPass.Text); и сделать это для всех параметров.

  3. Похоже, все параметры таблицы присутствуют.Просто дважды проверьте орфографию в дополнение к моему 2-му пункту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...