Выполнение обновления PostgreSQL в c # - PullRequest
0 голосов
/ 19 сентября 2018

Я сейчас работаю с моими товарищами по команде над проектом, касающимся связи между c # и базой данных PostgreSQL.У нас не было проблем с чтением базы данных через программу, но когда дело дошло до ее обновления, у нас возникла проблема.В нашей ситуации есть таблица с 2 столбцами, таблица называется acted, а столбцы - actor_id и movie_id.Мы используем метод Npgsql для подключения базы данных к нашей программе, и, несмотря на отсутствие ошибок, каждый раз, когда мы пытаемся обновить значение в столбце, на самом деле ничего не происходит, и значение остается неизменным.

Это метод, который мы используем

        public List<string> PostgreSQLtest5()   //endolse pros tin postgresql meros 1
    {

        String actcolumn = ??????;
        String actnewvalue =  ??????;
        String actoldvalue =  ??????;

        try
        {
            string connstring = "Server=127.0.0.1; Port=5432; User Id=postgres; Password=72677267; Database=imdb;";
            NpgsqlConnection connection = new NpgsqlConnection(connstring);
            connection.Open();
            NpgsqlCommand command = new NpgsqlCommand("UPDATE acted SET '"+actcolumn+"' = '"+actnewvalue+"' WHERE '"+actoldvalue+"'", connection);   
            NpgsqlDataReader dataReader = command.ExecuteReader();
            connection.Close();
            return dataItems;
        }
        catch (Exception msg)
        {
            MessageBox.Show(msg.ToString());
            throw;
        }
    }

У нас есть 3 текстовых поля в другой форме с именем acted.Что мы должны написать в вопросительных знаках в этих 3 переменных, чтобы получить ввод текстовых полей и заставить их работать?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Если вы посмотрите на свой SQL:

"UPDATE acted SET '"+actcolumn+"' = '"+actnewvalue+"' WHERE '"+actoldvalue+"'"

Это будет выглядеть так:

UPDATE acted SET 'some_column' = 'some_value' WHERE 'some_condition'

Что, если в одинарных кавычках вы используете буквальные значения.'some_column' - это не столбец - это статическое значение, и в этом контексте оно бессмысленно и должно выдавать ошибку.

Что вы, вероятно, имели в виду, это:

UPDATE acted SET some_column = 'some_value' WHERE <some_condition>

Что вC # термины будут:

NpgsqlCommand command = new NpgsqlCommand("UPDATE acted SET "+actcolumn+" = '"+
    actnewvalue+"' WHERE "+actoldvalue+"", connection); 

Или, возможно, лучше записать как:

NpgsqlCommand command = new NpgsqlCommand(string.Format(
    "UPDATE acted SET {0} = '{1}' WHERE {2}",
    actcolumn, actnewvalue, actoldvalue), connection); 

Или (немного размышляя здесь):

NpgsqlCommand command = new NpgsqlCommand(string.Format(
    "UPDATE acted SET {0} = '{1}' WHERE {0} = '{2}'",
    actcolumn, actnewvalue, actoldvalue), connection); 

И еще лучше-писан для использования параметров.

Ознакомьтесь с этим постом, чтобы узнать, как немного пуленепробиваемым это:

https://stackoverflow.com/a/52449390/1278553

0 голосов
/ 19 сентября 2018

Попробуйте вместо этого:

NpgsqlCommand command = new NpgsqlCommand("UPDATE acted SET "+actcolumn+" = '"+actnewvalue+"' WHERE "+actoldvalue+", connection);   
...