Member 12324523 Ответов: 2

Моя команда обновления не работает в ASP .NET C#


I need to update the text of a particular coulumn in database each time when i click save button that means it should not get submitted but it should get partially saved in database and next time when i click in that particular id
i should see the text that i previously saved in database the problem is it is not getting updated how can i resolve this


protected void btnsavenow_Click(object sender, EventArgs e)
    {
        if (Editor.Text.Length > 0)
        {
            string text = Editor.Text;
            string idnew = ViewState["ID"].ToString();
            string naenew = Session["uid"].ToString();
            string mnamenew = Session["modID"].ToString();
            string snew = Session["subId"].ToString();
            string anew = Session["audID"].ToString();
            string qucon = "select * from Status where TID='" + idnew + "' and CBy ='" + naenew  + "' and MID='" + mnamenew + "' and SID='" + snew + "' and AID='" + anew + "'";
            SqlCommand cmd = new SqlCommand(qucon, con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
  
                lblerrmsg.Text = "want to update";
                string partialtext = "UPDATE Status SET partiallysavedtext = @partiallysavedtext, Completed = 0 Where TID =' " + idnew  + "' and MID='" + mnamenew  + "' and SID='" + snew  + "' and aid='" + anew  + "' and CBy ='" + naenew   + "' ";
                cmd = new SqlCommand(partialtext,con);
                da = new SqlDataAdapter(cmd);
                cmd.Parameters.AddWithValue("@partiallysavedtext", temporarytext.ToString());
                con.Open();
                int i = cmd.ExecuteNonQuery();
                con.Close();
             
            
        }


Что я уже пробовал:

i tried above code but it is not getting updated

2 Ответов

Рейтинг:
1

OriginalGriff

Только не так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку с точки зрения SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x'; DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

После того как вы прошли через все свое приложение и исправили это, вы можете начать использовать отладчик, чтобы точно узнать, что находится в вашем предложении WHERE: если ничего не обновляется, это потому, что предложение WHERE не соответствует никаким записям, или temporarytext не то, что вы думаете, что это должно быть...


Рейтинг:
0

Jochen Arndt

В вашей команде обновления есть дополнительное место для TID параметр:

Where TID =' " + idnew  + "' and MID='"
            ^ here


Member 12324523

но все равно он не работает я равен нулю только не могли бы вы показать где я допустил ошибку в своем коде

Jochen Arndt

Я не могу этого сделать, потому что у меня нет доступа к вашей базе данных.

Возвращает ли ваш запрос SELECT что-нибудь?
Если нет, то команда UPDATE тоже ничего не сделает (при условии, что в предложениях WHERE больше нет различий).