Я пытаюсь написать что-то в базе данных oracle с помощью c# (winforms), и я могу заставить работать только оператор SELECT, а не оператор INSERT - PullRequest
0 голосов
/ 12 июля 2020

Я написал следующий код для подключения к базе данных oracle с моим кодом c#:

private string GenerateConnectionString()
{
    return "Data Source=( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP )( HOST = 192.168.X.XXX)( PORT = 1521 ) ) )( CONNECT_DATA = ( SERVER = DEDICATED )( SERVICE_NAME = XXXX ) ) ); User Id= xxxxxx; Password = xxxxxx;";
}

private void button1_Click_1(object sender, EventArgs e)
{
    try
    {
        using (OracleConnection connection = new OracleConnection(GenerateConnectionString()))
        {
            connection.Open();
            lblState.Text = connection.State.ToString();
            OracleCommand oc = connection.CreateCommand();
            oc.CommandText = "INSERT INTO TABLE (NO1, NO2, NO3, NO4, NO5, NO6, NO7, NO8, NO9, NO10, NO11, NO12, DATE) VALUES(1,2,3,1,1,1,'{txb_Textbox1.Text}',5,0.5,10,11,12,TO_DATE('09.07.2020 16:24:00', 'DD.MM.YYYY HH24:MI:SS'))";
            oc.ExecuteNonQuery();
         
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show( "Exception: " + ex.Message );
        lblState.Text = ex.Message;
    }
}

Я также установил все необходимые драйверы для подключения к базе данных oracle и добавил System.Data.OracleClient.dll в качестве ссылки на мой проект c# и добавил файлы «oraocci19.dll» и «oraocci19d.dll» в файл проекта. Я также добавил клиента oracle в переменные системной среды в PATH. Кроме того, я объявил using System.Data.OracleClient; в начале моего общего кода.

Пожалуйста, не говорите мне, что я не использую последние Oracle компоненты доступа к данным (ODAC). Я знаю это. У нас очень старая база данных Oracle, и мне нравится идея, что мне нужно установить всего несколько oracle dll, чтобы она работала.

Я просто не знаю, что делать, и потратил все Пятница и все выходные занимались исследованиями, чтобы я мог писать в базу данных Oracle. Я надеюсь, что кто-то из опытных сразу распознает проблему и сможет мне помочь. Заранее большое спасибо! :) С уважением

Edit1: Может быть, мне стоит попробовать другие Oracle компоненты доступа к данным (ODAC) и их библиотеки DLL. Но обычно мои файлы dll тоже должны работать. Мой коллега использовал мою установку ODA C и сказал, что с ней все работает. Но ему нужно было только читать данные из таблицы Oracle, а не записывать в одну.

Edit2: У меня проблема! Я смог найти решение. Это была ошибка в моем Oracle Подсказке в строке. Код C# был правильным. Здесь, в stackoverflow, я, конечно, переформулировал и обобщил строку приглашения Oracle, потому что она содержит надежные данные. Ошибка была в команде Oracle. Эту тему можно закрыть. Пит -С- получил правильный ответ!

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы можете попробовать следующее:

//Do the insert
 oc.CommandText = "INSERT INTO TABLE (NO1, NO2, NO3, NO4, NO5, NO6, NO7, NO8, NO9, NO10, NO11, NO12, DATE) VALUES(1,2,3,1,1,1,'{txb_Textbox1}',5,0.5,10,11,12,TO_DATE('09.07.2020 16:24:00', 'DD.MM.YYYY HH24:MI:SS'))";
oc.ExecuteNonQuery;

//Retrieve in a separate action (you have to update your command to SELECT from INSERT)
oc.CommandText = "SELECT * FROM TABLE"; Statement
OracleDataReader reader = oc.ExecuteReader();
            

Еще одна вещь, на которую вы можете взглянуть, - это CommandBuilder ; но это легкий выход, тогда хорошее решение. Затем вы можете указать SELECT, и построитель команд создаст команды INSERT, UPDATE и DELETE.

Другие мысли Я не думаю, что вы можете привязать считыватель данных к .DataSource . Вы можете загрузить таблицу данных из устройства чтения данных, см. этот пример .

Подробнее о DataAdapters и DataReaders

  • Чтобы ОБНОВИТЬ / ВСТАВИТЬ: используйте .ExecuteNonQuery
  • Чтобы ВЫБРАТЬ: есть разные варианты, один - создать DataTable через DataAdapaters и связать источник данных с помощью таблицы данных.
0 голосов
/ 12 июля 2020

Вы делаете это в неправильном порядке, вам нужно сначала установить текст команды, а затем выполнить команду (с ExecuteNonQuery() или ExecuteReader()):

 OracleCommand oc = connection.CreateCommand();
 oc.CommandText = "INSERT INTO TABLE (NO1, NO2, NO3, NO4, NO5, NO6, NO7, NO8, NO9, NO10, NO11, NO12, DATE) VALUES(1,2,3,1,1,1,'{txb_Textbox1}',5,0.5,10,11,12,TO_DATE('09.07.2020 16:24:00', 'DD.MM.YYYY HH24:MI:SS'))";
 OracleDataReader reader = oc.ExecuteReader();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...