ORA-01036: как исправить данную проблему?

253
26 мая 2018, 04:30

При выполнении запроса назад возвращает сообщение о том, что неверный тип данных. Как это можно исправить? Таблица SQL в Oracle SQL Database XE 11g release-2:

CREATE TABLE "questions"
("id" number not null,
"question" char(100));

Код программы, где все это выполняется:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OracleClient;
namespace DBKR
{
    public partial class Form2 : Form
    {
        const string connectionString = "DATA SOURCE=localhost:1521/xe;PASSWORD=12345;PERSIST SECURITY INFO=True;USER ID=SYSTEM";
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int a = Convert.ToInt32(textBox1.Text);
            string b = richTextBox1.Text;
            using (OracleConnection ConnectionToOracle = new OracleConnection(connectionString))
            {
                OracleCommand cmd = new OracleCommand
                {
                    CommandText = "INSERT INTO \"questions\" VALUES (@a, @b)",
                    Connection = ConnectionToOracle,
                };
                cmd.Parameters.Add("@a", OracleType.Int32).Value = a;
                cmd.Parameters.Add("@b", OracleType.NVarChar).Value = b;
                //cmd.Parameters.AddWithValue("@a", a);
                //cmd.Parameters.AddWithValue("@b", b);
                ConnectionToOracle.Open();
                cmd.ExecuteNonQuery();
            }
        }
    }
}
Answer 1

Как уже заметили, "ORA-01036: illegal variable name/number" это неверное имя переменной либо их количество, а не тип.

Вообще, в Oracle все числовые (дробные/целые, без-/знаковые) типы данных соответствуют типу Decimal в .Net, а все символьные (+некоторые другие) соотв. String в .Net.
см. сопоставление типов данных Oracle;

в вашем случае, для

CREATE TABLE "questions"
("id" number not null,
"question" char(100));

учитывая перечисление OracleType вы могли бы написать так:

decimal a = Convert.ToDecimal(textBox1.Text);
string b = richTextBox1.Text;
OracleCommand cmd = new OracleCommand
{
    CommandText = "INSERT INTO \"questions\" VALUES (:a, :b)",
    Connection = ConnectionToOracle,
};
cmd.Parameters.Add("a", OracleType.Number).Value = a;
cmd.Parameters.Add("b", OracleType.Char).Value = b;
READ ALSO
В чём разница между LinkedList<T> и LinkedListNode<T>?

В чём разница между LinkedList<T> и LinkedListNode<T>?

Читаю о LinkedList, затем в коде появляется LinkedListNodeВ книге используется, но не объясняется что это

199
Как отрисовать линии на изображении?

Как отрисовать линии на изображении?

Есть такой скрипт(рисует треугольник по заданным координатам и вставляет его в изображение) -

220
Можно ли улучшить данный класс

Можно ли улучшить данный класс

Имеется сей класс, для копирования UTF8 массива символов в неуправляемую память подобно char**, все ли в нем нормально, и можно ли его улучшить?

199