Я был во всем Интернете с этим, и я удивлен, как я не могу найти способ сделать то, что я ищу.
Я использую библиотеку Oracle.DataAccess.Client
в своем проекте C#, не устаревшую System.Data.OracleClient.
У меня есть очень простая таблица:
CREATE TABLE testing (
ID NUMBER(10),
COMMENTS CLOB,
DATECREATED DATE DEFAULT (SYSDATE) NOT NULL,
DATEMODIFIED DATE
);
INSERT INTO testing (ID, COMMENTS) VALUES(1, 'this is a test');
Вышеупомянутое, очевидно, работает просто отлично. Проблема в том, что это поле комментария будет изменено. В моей программе на С# я хотел бы разрешить пользователям сохранять комментарии. В этом примере я удаляю все сложное.
У меня есть кнопка в форме и текстовое поле под названием «комментарии».
using (OracleConnection connection = new OracleConnection(<VALID CONN STRING GOES HERE>)) {
connection.Open();
using (OracleCommand command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = "UPDATE testing SET COMMENTS = :COMMENTS, DATEMODIFIED = sysdate WHERE ID = :ID";
command.CommandType = CommandType.Text;
command.Parameters.Add("ID", OracleDbType.Int32, ParameterDirection.Input).Value = 1;
command.Parameters.Add("COMMENTS", OracleDbType.Clob, ParameterDirection.Input).Value = comments.Text;
command.ExecuteNonQuery();
}
}
Так что в основном этот код работает, пока я не пытаюсь написать Clob. Если я сохраню измененную дату, она будет создана, как и ожидалось. Однако, когда я сохраняю с помощью Clob, ничего не происходит. Никаких сообщений об ошибках от оракула, никаких исключений, ничего.
Если я откажусь от параметризации и сделаю это неправильно:
command.CommandText = "UPDATE testing SET COMMENTS = " + comments.Text + ", DATEMODIFIED = sysdate";
Нет проблем. Кажется, здесь проблема с параметризацией.