2014-04-18 4 views
1

enter image description here J'essaie de mettre à jour ma table de base de données ExpenseManagement. Mais ce n'est pas mis à jour.Comment mettre à jour une table

using System; 

using System.Collections.Generic; 

using System.Linq; 

using System.Web; 

using System.Web.UI; 

using System.Web.UI.WebControls; 

using System.Configuration; 

using System.Data.SqlClient; 

using System.Data; 


public partial class UserProfile : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

      txtUserId.Text = Request.Cookies["txtUserName"].Value; 

      string con_string = @"data Source= 10.10.10.5; initial catalog= test; user= xx; password= xxxxxxxxx;"; 

      SqlConnection con = new SqlConnection(con_string); 

      SqlCommand cmd = new SqlCommand("select FirstName, LastName, Password, EmailId, MobileNumber from ExpenseManagement where UserId ='"+txtUserId.Text+"'", con); 

      cmd.Parameters.AddWithValue("@UserId", txtUserId.Text); 

      con.Open(); 

      DataTable dt = new DataTable(); 

      SqlDataAdapter da = new SqlDataAdapter(cmd); 

      da.Fill(dt); 

      txtFirstName.Text = dt.Rows[0]["FirstName"].ToString(); 

      txtLastName.Text = dt.Rows[0]["LastName"].ToString(); 

      txtPassword.Text= dt.Rows[0]["Password"].ToString(); 

      txtEmailId.Text = dt.Rows[0]["EmailId"].ToString(); 

      txtMobileNumber.Text = dt.Rows[0]["MobileNumber"].ToString(); 

      con.Close(); 

      txtUserId.Enabled = false; 

      txtFirstName.Enabled=false; 

      txtLastName.Enabled=false; 

      txtPassword.Enabled = false; 

      txtEmailId.Enabled = false; 

      txtMobileNumber.Enabled = false; 

      btnUpdate.Visible = false; 
    } 

    protected void Button1_Click1(object sender, EventArgs e) 
    { 

     txtUserId.Enabled = true; 

     txtUserId.ReadOnly = true; 

     txtFirstName.Enabled = true; 

     txtLastName.Enabled = true; 

     txtPassword.Enabled = true; 

     txtMobileNumber.Enabled = true; 

     txtEmailId.Enabled = true; 

     btnUpdate.Visible = true; 

     btnEdit.Visible = false; 
    } 

    protected void btnUpdate_Click(object sender, EventArgs e) 
    { 

     string con_string = @"data Source= 10.10.10.5; initial catalog= test; user= xx; password= xxxxxxxxx;"; 

     SqlConnection con = new SqlConnection(con_string); 

     string qryUpdate = "Update ExpenseManagement set FirstName= @FirstName, [email protected], [email protected], [email protected],[email protected] where UserId= @UserId"; 

     SqlCommand cmd = new SqlCommand(qryUpdate, con); 

     cmd.Parameters.AddWithValue("@UserId", txtUserId.Text); 

     cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 

     cmd.Parameters.AddWithValue("@LastName", txtLastName.Text); 

     cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 

     cmd.Parameters.AddWithValue("@EmailId", txtEmailId.Text); 

     cmd.Parameters.AddWithValue("@MobileNumber", txtMobileNumber.Text); 

     con.Open(); 

     if (Page.IsValid) 
     { 

      cmd.ExecuteNonQuery(); 

      btnEdit.Visible = true; 
     } 

     con.Close(); 
    } 
} 

J'ai les champs suivants: la base de données

UserId, FirstName, LastName, Password, EmailId, MobileNumber. 
+0

obtenir une erreur? – Shell

+0

@Nimesh Getting Pas d'erreur. –

+0

Utiliser la chaîne de connexion comme 'Server = 10.10.10.5; User id = sa; mot de passe = multiverse @ 1; Initial Catalog = test' –

Répondre

2

Manquant le Page.IsPostBack vérifier sur l'événement Page_Load.

Dans ASP.NET, lorsque vous déclenchez un événement sur un contrôle côté serveur, l'événement Page_Load est toujours exécuté avant le code dans l'événement de contrôle.

Dans votre cas, votre utilisateur modifie les zones de texte, puis appuie sur le bouton Mettre à jour. Cela déclenche l'événement Page_Load suivi de l'événement btnUpdate_Click. Sans vérification de la propriété IsPostBack, l'événement Page_Load recharge les zones de texte de la base de données avec les valeurs d'origine détruisant efficacement les données saisies par l'utilisateur, puis le code d'événement de bouton est appelé. Mais à ce stade, les valeurs dans les zones de texte sont celles d'origine, donc votre code s'exécute correctement, mais ne change rien.

Modifier l'événement Page_Load ajouter

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(!IsPostBack) 
     { 
     txtUserId.Text = Request.Cookies["txtUserName"].Value; 
     string con_string = @"data Source= 10.10.10.5; initial catalog= test; user= xx; password= xxxxxxxxx;"; 
     SqlConnection con = new SqlConnection(con_string); 
     SqlCommand cmd = new SqlCommand(@"select FirstName, LastName, Password, 
              EmailId, MobileNumber 
              from ExpenseManagement 
              where UserId [email protected]", con); 
     cmd.Parameters.AddWithValue("@UserId", txtUserId.Text); 
     con.Open(); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     ...... 
     btnUpdate.Visible = false; 
    } 
} 
+0

Oui .. maintenant ça marche .. Merci beaucoup @Mr. Steve –

0

Je pense que le problème est en utilisant cmd.Parameters.AddWithValue("@UserId", txtUserId.Text); car il ajouter un paramètre de type string (parce que txtUserId.Text est une chaîne) au lieu de int ou long, donc changez-le en cmd.Parameters.AddWithValue("@UserId", int.parse(txtUserId.Text)); ou utilisez cmd.Parameters.Add() qui prend type comme argument.

+0

mes ID utilisateur sont A1001, A1002, etc. .. Cela ne fonctionne pas. –

+0

Montrer exception- "chaîne d'entrée n'est pas au format correct" –

+0

si elles sont chaîne, votre code de cette vue est OK – RezaRahmati

1

je pourrais recommander pour la commande d'être plus lisible pour l'utilisateur @ au lieu de chaînes concaténer avec signe « + » comme ci-dessous:

protected void btnUpdate_Click(object sender, EventArgs e) 
     { 
      string con_string = @"data Source= 10.10.10.5;initial catalog= test; user= xx; password= xxxxxxxxx;"; 
      SqlConnection con = new SqlConnection(con_string); 
      string qryUpdate = @"Update ExpenseManagement 
           set FirstName= @FirstName, 
            [email protected], 
            [email protected], 
            [email protected], 
            [email protected] 
            where UserId= @UserId"; 
      SqlCommand cmd = new SqlCommand(qryUpdate, con); 
      cmd.Parameters.AddWithValue("@UserId", Convert.ToInt32(txtUserId.Text)); 
      cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
      cmd.Parameters.AddWithValue("@LastName", txtLastName.Text); 
      cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 
      cmd.Parameters.AddWithValue("@EmailId", txtEmailId.Text); 
      cmd.Parameters.AddWithValue("@MobileNumber", txtMobileNumber.Text); 
      con.Open(); 

      if (Page.IsValid) 
      { 
       cmd.ExecuteNonQuery(); 
       btnEdit.Visible = true; 
      } 
      con.Close(); 
     } 

Aussi je suis d'accord avec RezaRahmati pour convertir l'ID utilisateur et d'autres paramètres pour corriger types que vous avez définis dans votre base de données, colonnes de table.

Questions connexes