Member 14192879 Ответов: 1

Как обновить данные, если они уже существуют через ASP.NET visual studio 2017


Я разрабатываю веб-приложение с помощью asp.net-да. Я хочу обновить данные, если они уже существуют, иначе вставить. Я использовал приведенный ниже код. но оператор update не работает.

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

MySqlCommand cmdCount = new MySqlCommand("SELECT count(*) from travel WHERE  clientid='" + Session["clientid"] + "' and clientida='" + Session["clientida"] + "' ", con);
            con.Open();
            int count = Convert.ToInt16(cmdCount.ExecuteScalar());
            if (count > 0)
            {
                // UPDATE STATEMENT     

                MySqlCommand updCommand = new MySqlCommand("UPDATE travel SET Tcountry =@Tcountry,TArrivalDate=@TArrivalDate,TDepartureDate=@TDepartureDate,TReasonofTravel=@TReasonofTravel WHERE  clientid='" + Session["clientid"] + "' and clientida='" + Session["clientida"] + "' ", con);
                updCommand.Parameters.AddWithValue("@Tcountry", DropDownList1.Text);
                updCommand.Parameters.AddWithValue("@TArrivalDate", TextBox1.Text);
                updCommand.Parameters.AddWithValue("@TDepartureDate", TextBox2.Text);
                updCommand.Parameters.AddWithValue("@TReasonofTravel", DropDownList2.Text);            
                int rowsUpdated = updCommand.ExecuteNonQuery();

            }
            else
            {

                // INSERT STATEMENT
                MySqlCommand insCommand = new MySqlCommand("INSERT into travel(clientid,clientida,Tcountry,TArrivalDate,TDepartureDate,TReasonofTravel)VALUES(@clientid,@clientida,@Tcountry,@TArrivalDate,@TDepartureDate,@TReasonofTravel)", con);

                insCommand.Parameters.AddWithValue("@clientid", TextBox3.Text);
                insCommand.Parameters.AddWithValue("@clientida", TextBox4.Text);
                insCommand.Parameters.AddWithValue("@Tcountry", DropDownList1.Text);
                insCommand.Parameters.AddWithValue("@TArrivalDate", TextBox1.Text);
                insCommand.Parameters.AddWithValue("@TDepartureDate", TextBox2.Text);
                insCommand.Parameters.AddWithValue("@TReasonofTravel", DropDownList2.Text);
                int rowsUpdated = insCommand.ExecuteNonQuery();
            }

1 Ответов

Рейтинг:
10

MadMyche

Ну, первое, что я вам скажу, - это использовать отладчик, установить некоторые точки останова и посмотреть, какие значения находятся в вашем коде:
Какое значение присваивается при int count = ...ExecuteScalar();
Не то, что вы ожидаете?

Может быть, нам следует создать некоторые значения для тех переменных сеанса, которые вы используете, и, естественно, я скажу вам использовать их в вашем запросе в качестве параметров - я вижу, что в вашем блоке вставки/обновления вы знаете, как использовать cmd.Parameters.AddWithValue()

Итак, давайте начнем с этого блока кода, проведем отладку

string sesClientID = Session["clientid"];
string sesClientIDa = Session["clientida"];
MySqlCommand cmdCount = new MySqlCommand("SELECT count(*) from travel WHERE  clientid=@ClientID AND clientida=@ClientIDa", con);
cmdCount.Parameters.AddWithValue("@ClientID", ClientID);
cmdCount.Parameters.AddWithValue("@ClientIDa", ClientIDa);
con.Open();
int count = Convert.ToInt16(cmdCount.ExecuteScalar());
if (count > 0) // set breakpoint on this line
Таким образом, работая отсюда, вы должны быть в состоянии увидеть, каковы ваши значения сеанса и находит ли он их в БД или нет. Продолжайте этот путь через ваш код и помните, что всегда используйте параметры.

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


Member 14192879

MySqlCommand cmdCount = новый MySqlCommand("выбрать количество(*) из chetans где clientid1=@clientid1 и идентификатора ClientID=@идентификатора ClientID", кон);
cmdCount.Параметры.AddWithValue ("@clientid1", TextBox6.Text);
cmdCount.Параметры.AddWithValue("@clientid", TextBox7.Text);
против.Открыть();
граф инт = инт.Синтаксический анализ(cmdCount.ExecuteScalar().Метод toString());
теперь, после изменений, я использовал код.
count используется для количества записей, которые для clientid.
но все равно не обновляется