Member 11307750 Ответов: 1

Как обновить значения ИД в цикл while, перед обновлением базы данных с помощью C#


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Collections.Generic;
using System.Text;

public partial class Nampak_AddFal : System.Web.UI.Page
{
    string selectSQL, selectSQL1, selectSQL5;
    string updateSQL, updateSQL1, updateSQL5, updateSQL6, updateSQL2;
    SqlCommand cmd = new SqlCommand();
    SqlCommand cmd1 = new SqlCommand();
    SqlCommand cmd2 = new SqlCommand();
    SqlCommand cmd3 = new SqlCommand();
    SqlCommand cmd5 = new SqlCommand();
    SqlCommand cmd6 = new SqlCommand();
    SqlCommand cmd9 = new SqlCommand();
    SqlConnection dbConn = new SqlConnection();
    SqlConnection dbConn1 = new SqlConnection();
    SqlConnection dbConn2 = new SqlConnection();
    SqlConnection dbConn3 = new SqlConnection();
    SqlConnection dbConn4 = new SqlConnection();
    SqlConnection dbConn5 = new SqlConnection();
    SqlConnection dbConn6 = new SqlConnection();
    SqlDataReader dr, dr1, dr2, dr3, dr5, dr8;
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void SetSS_Click(object sender, EventArgs e)
    {
        Session["YY"] = DropDownList1.SelectedItem.Text;
        int Q = Convert.ToInt32(TextBox1.Text);
        


        selectSQL = "select id, RTicket from Staff WHERE Jobtype ='Contract'";
        dbConn.ConnectionString = "Data Source=LAPTOP\\SQLEXPRESS; Initial         Catalog=Namh;Integrated Security=True;";
        cmd.Connection = dbConn;
        cmd.CommandText = selectSQL;
        cmd.CommandType = CommandType.Text;

        try
        {
            dbConn.Open();
         
            dr = cmd.ExecuteReader();
           while (dr.Read())
            {
                Session["FT"] = dr["Rticket"].ToString();
                 int W = Convert.ToInt32(Session["FT"]);
                int S = W + Q;
                string P = S.ToString();
                Session["PP"] = S.ToString();
             


              updateSQL1 = "update Staff set  Rticket='" + Session["PP"].ToString() + "' where  Jobtype ='Contract' ";
              // Response.Write(updateSQL1);
               dbConn1.ConnectionString = "Data Source=LAPTOP\\SQLEXPRESS; Initial Catalog=Namh;Integrated Security=True;";

               cmd1.Connection = dbConn1;
               cmd1.CommandText = updateSQL1;
               cmd1.CommandType = CommandType.Text;
               try
               {

                   dbConn1.Open();
                   int updated1 = cmd1.ExecuteNonQuery();
                   if (updated1 == 1)
                   {
                      Response.Write("well done");
                       


                   }
                   else
                   {
                     Response.Write("double");
                       


                       
                       } 
                       
                      
                   
               }
               catch (Exception err)
               {
                   Label6.Text = "Error  Logging in 2 ";
                   Label6.Text += err.ToString();
               }
               finally
               {
                   dbConn1.Close();
               }

            }
           
            dr.Close();
        }
        catch (Exception err)
        {
            Label6.Text = "Error  Logging in 2 ";
            Label6.Text += err.ToString();
        }
        finally
        {
            dbConn.Close();
        }



    }
}


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

20
34
56
67

но он обновляет все значения до тех же значений в базе данных, например

98
98
98
98

вместо того чтобы сказать int Q =4

24
38
60
71
в базе данных ,пожалуйста, помогите

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

я пробовал использовать инструкцию update

1 Ответов

Рейтинг:
0

ZurdoDev

Это ваш оператор SQL:

update Staff set  Rticket='" + Session["PP"].ToString() + "' where  Jobtype ='Contract'


Таким образом, совершенно ясно, что он обновит любую запись в таблице персонала, которая имеет тип контракта jobtype. Поэтому, если вы не хотите обновлять все записи контракта, вам нужно добавить что-то в свой пункт WHERE.

Кроме того, некоторые указатели:
1. Вы не показали весь свой код, но у вас есть много отдельных соединений sql и команд sql. Это, вероятно, плохой способ делать вещи. Вы упоминаете в своем названии о цикле while, но он вам не нужен. Похоже, что вы вытаскиваете значение, меняете его, а затем записываете обратно в БД. Используйте только одно соединение для этого процесса и одну команду sql.

2. Назовите ваши элементы управления чем-то, что имеет смысл. Похоже, что вы показываете сообщения в элементе управления с именем Label6. Назовите его lblMessages или lblError или что-то в этом роде, чтобы вам не приходилось переключаться на дизайн формы каждый раз, когда вы пытаетесь выяснить, что это за элемент управления.