2012-02-12 4 views
0

J'essaie de mettre à jour mes enregistrements de base de données, mais aucune modification n'est effectuée et aucun message d'erreur n'est affiché. J'ai vérifié la syntaxe, les valeurs que j'envoie, tout va bien .. des suggestions?ASP.NET: Les enregistrements dans la base de données ne sont pas mis à jour

C'est mon code qui a exécuté lorsque [Enregistrer] est cliqué:

ds.UpdateCommand = "UPDATE Users 
        SET Fullname='" + fname.Text + "', 
         Permission='" + per.SelectedValue + "', 
         Email='" + email.Text + "', 
         phone='" + phone.Text + "' 
        WHERE UserID=" + Session["userID"].ToString(); 
ds.Update(); 

Je lis des valeurs de formulaire rempli par l'utilisateur ds est un SqlDataSource

Si je dois ajouter plus de détails laissez-moi savoir


EDITS:

Cette page est pour que l'utilisateur met à jour ses informations

Je définis les valeurs de formulaire sur Page_Load en fonction des informations sur les utilisateurs qui existent déjà dans la base de données.

l'utilisateur modifie sa/son info et cliquez sur [Enregistrer]

après avoir braekpoints, je trouve que la chaîne de requête prend les valeurs par défaut pas les nouveaux ones. que devrais-je faire?


Le code entier:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["userID"] = Request.QueryString["id"]; 

     SqlConnection cn = new SqlConnection(); 
     cn.ConnectionString = ds.ConnectionString; 
     cn.Open(); 

     SqlCommand cm = new SqlCommand(); 
     cm.Connection = cn; 
     cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'"; 

     SqlDataReader dr; 
     dr = cm.ExecuteReader(); 

     if (dr.Read()) 
     { 
      uname.Text = dr["username"].ToString(); 
      fname.Text = dr["Fullname"].ToString(); 
      per.SelectedValue = dr["Permission"].ToString(); 
      email.Text = dr["Email"].ToString(); 
      phone.Text = dr["phone"].ToString(); 
     } 
     else Response.Redirect("Default.aspx"); 
     dr.Close(); 
     cn.Close(); 

} 
protected void Button3_Click(object sender, EventArgs e) 
{ 

    ds.UpdateCommand = "update Users set Fullname='" + fname.Text + "', Permission='" + per.SelectedValue + "', Email='" + email.Text + "', phone='" + phone.Text + "' where UserID=" + Session["userID"].ToString(); 
    ds.Update(); 
    Response.Redirect("control_pan.aspx"); 

} 

Répondre

0

Je soupçonne que la Session["UserID"] est nulle. Pour vérifier ce point de coupure sur ds.Update(); en plaçant le curseur dessus puis en appuyant sur F9.
Pour voir la requête de résultats, placez le pointeur de votre souris sur ds.UpdateCommand lorsque le point de rupture marque une pause.

Mise à jour: mettre le code dans la charge de la page à exécuter une seule fois qui est en premier chargement de la page

if(!IsPostBack) 
{ 
    //put your code here 
} 

Mise à jour

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!IsPostBack) 
{ 
    Session["userID"] = Request.QueryString["id"]; 

    SqlConnection cn = new SqlConnection(); 
    cn.ConnectionString = ds.ConnectionString; 
    cn.Open(); 

    SqlCommand cm = new SqlCommand(); 
    cm.Connection = cn; 
    cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'"; 

    SqlDataReader dr; 
    dr = cm.ExecuteReader(); 

    if (dr.Read()) 
    { 
     uname.Text = dr["username"].ToString(); 
     fname.Text = dr["Fullname"].ToString(); 
     per.SelectedValue = dr["Permission"].ToString(); 
     email.Text = dr["Email"].ToString(); 
     phone.Text = dr["phone"].ToString(); 
    } 
    else Response.Redirect("Default.aspx"); 
    dr.Close(); 
    cn.Close(); 
} 
} 
+0

non son non nul, je pensais que aussi et je l'ai vérifié. J'ai édité la question, pourriez-vous jeter un oeil? – Meensat

+0

ne fonctionne pas .. la requête est vide maintenant – Meensat

+0

Je pense qu'il est préférable si vous affichez votre code et le balisage – Mubarek

0

Je doute sérieusement que vous avez fourni suffisamment de détails ici pour résoudre le problème.

Ce type est ID utilisateur? La valeur doit-elle être incluse entre guillemets?

Définissez-vous la bonne valeur dans votre clause WHERE et cette valeur existe-t-elle dans la base de données? Vous devez regarder la chaîne de requête résultante, puis l'exécuter manuellement pour déterminer ce qui pourrait être faux.

De même, ne devriez-vous pas avoir le préfixe de caractère @ pour votre chaîne afin que les nouvelles lignes fassent partie de votre chaîne? Est-ce vraiment ce que votre code ressemble?

Bien sûr, sans en savoir plus sur le code, il est difficile de dire ce qu'il pourrait bien être.

+0

Je suis désolé, pour ne pas être assez clair .. UserID est de type int, pas besoin d'être inclus, et j'ai essayé d'ajouter des guillemets. Comment puis-je regarder la chaîne de requête résultante et l'exécuter manuellement? quels autres détails dois-je ajouter? – Meensat

+0

Utilisez le débogueur. Quelle est la valeur de 'UpdateCommand' après l'avoir définie? –

2

Fondamentalement, si vous avez un DataSet et que vous voulez utiliser pour mettre à jour votre base de données, vous devez:

  • définissent le UpdateCommand comme indiqué dans le MSDN documentation pour référencer les colonnes du DataTable qui sera être utilisé pour mettre à jour

  • mise à jour d'une ligne existante dans un de vos DataTable s à l'intérieur du DataSet

  • une fois que vous avez fait cela, alors vous pouvez appeler .Update() sur l'ensemble de données (ou table de données) pour exécuter la mise à jour - ADO.NET vérifiera les mises à jour à l'une des lignes de la DataTable, et si une mise à jour est trouvée, le UpdateCommand sera exécuté, avec les paramètres liés aux valeurs de la ligne de la DataTable en question

Je recommande également de lire sur la façon dont le modèle de données ADO.NET et en utilisant DataSets et DataTables fonctionne en détail - par exemple ici Update Data Using .NET DataSets

L'alternative, bien sûr, serait de créer un SqlConnection et un SqlCommand, en utilisant une requête avec paramètres pour faire vous-même insérer, sans tous les tracas et les efforts nécessaires avec jeux de données et DataTables. Mais dans ce cas, assurez-vous de toujours utiliser des requêtes paramétrées (et JAMAIS juste concaténer ensemble votre instruction SQL, y compris les valeurs de l'entrée d'utilisateur droite .....) - see why here

+0

Je suis en train de mettre à jour la base de données en utilisant 'SqlDataSource'. Je ne savais pas que j'avais besoin de plus de mesures à ajouter. il travaille avec 'insert' et' delete' – Meensat

Questions connexes