Выполнение обновления PostgreSQL в C#

В настоящее время я работаю со своими товарищами по команде над проектом, касающимся связи между 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 текстовых поля в другой форме с именем действовал. Что мы должны написать в вопросительных знаках в этих 3 переменных, чтобы получить ввод текстовых полей и заставить их работать?

2 ответа

Если вы посмотрите на свой 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); 

И даже лучше переписать, чтобы использовать параметры.

Проверьте этот пост для примера того, как пуленепробиваемый это немного:

/questions/23445927/kak-izmenit-ustanovlennoe-znachenie-komandyi-obnovleniya-npgsql-postgresql-c/23445937#23445937

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

NpgsqlCommand command = new NpgsqlCommand("UPDATE acted SET "+actcolumn+" = '"+actnewvalue+"' WHERE "+actoldvalue+", connection);   
Другие вопросы по тегам