2013-05-02 3 views
0

D'une manière ou d'une autre, l'une de mes procédures stockées a simplement cessé d'être exécutée à partir de la page aspx. Cela fonctionne si je l'exécute à partir de SQL Server en utilisant EXEC. Mais quand je clique sur un bouton sur ma page aspx qui assigne des paramètres et des valeurs, et lance cette procédure, la page se recharge mais les données ne sont pas mises à jour. Ce bouton peut exécuter une procédure de création ou de mise à jour, en fonction des paramètres de la page dans la barre d'adresse. Mais rien n'est exécuté.Comment obtenir la valeur de la zone de texte dans ASP.NET click eventhandler

Dans la page ASPX je crée ce bouton comme ceci:

<asp:Button id="btnSaveChanges" runat="server" 
    class="class_Button Normal Enabled" 
    OnClick="btnSaveChanges_Click" Text="Save changes" Width="100" /> 

Puis dans le fichier code-behind:

protected void btnSaveChanges_Click(object s, EventArgs e) 
{ 
    //if (Page.IsValid) 
    //{ 
     SqlCommand sqlComm1 = new SqlCommand(); 
     SqlConnection sqlConn1 = new SqlConnection("Server=localhost\\SqlExpress;Database=TestDB;Integrated Security=true"); 

     sqlConn1.Open(); 

     if(param_id == 0) 
     { 
      sqlComm1 = new SqlCommand("dcspCreateEmpDetails", sqlConn1); 
     } 

     if(param_id > 0) 
     { 
      sqlComm1 = new SqlCommand("dcspUpdateEmpDetails", sqlConn1); 
     } 

     sqlComm1.CommandType = CommandType.StoredProcedure; 

     if (param_id > 0) 
      sqlComm1.Parameters.AddWithValue("@empID", param_id); 

     sqlComm1.Parameters.AddWithValue("@empName1", tbName1.Text); 
     sqlComm1.Parameters.AddWithValue("@empSurname", tbSurname.Text); 
     sqlComm1.Parameters.AddWithValue("@empBirthDate", Convert.ToDateTime(tbBirthDate.Text)); 

     sqlComm1.ExecuteNonQuery(); 
    //} 
    sqlConn1.Close(); 
} 

Voilà. La page est valide, 100%. Et même si j'enlève la vérification de validation, pas de résultat.

Voici la procédure:

CREATE PROCEDURE dcspUpdateEmpDetails 
    @empID int, 
    @empName1 nvarchar(50) = null, 
    @empSurname nvarchar(50) = null, 
    @empBirthDate datetime = null 
AS 
    UPDATE Employees 
    SET 
     name_1 = @empName1, 
     surname = @empSurname, 
     date_of_birth = @empBirthDate 
    WHERE (employee_id = @empID) 

espère que vous me aider avec elle, les gars. Je ne comprends vraiment pas ce qui est arrivé à ce genre de choses ...

Mises à jour pour le sujet:

Examiner les messages de débogage je trouve, qui perd son texte zone de texte avant la procédure stockée en cas OnClick prend cette texte en tant que paramètre

Est-il vraiment normal que le serveur restaure d'abord la page et seulement après qu'il exécute le code dans l'événement OnClick? Je pense que c'est logiquement incorrect parce que Page_Load est conçu pour charger la page par défaut, tandis que les boutons et autres contrôles sont utilisés pour changer et manipuler le contenu d'une page. Pourquoi ai-je besoin de ces contrôles si leur code ne peut pas s'exécuter en temps opportun?

+2

Il existe deux procédures stockées possibles ici, Mettre à jour et Créer. Avez-vous parcouru le code dans le débogueur pour vous assurer que le SP que vous attendez d'exécuter est celui qui est en cours d'exécution? Aussi, pourquoi ne pas ajouter un bloc try/catch et intercepter les exceptions? Assurez-vous que les valeurs des paramètres sont bonnes? – Tim

+0

En outre, où 'param_id' est-il déclaré? – Tim

+0

Ok, param_id déclaré dans la classe partielle publique de la page. C'est ok, dans le mode débogage il a une valeur correcte. Mais je viens de trouver que les textboxes restituent leurs textes avant que mon nouveau texte soit passé aux paramètres. Pourquoi? Est-ce à cause de la publication? Alors comment puis-je le garder? Et pourquoi cela a-t-il fonctionné avant? – SWA

Répondre

0

Ok, le problème a été résolu. Comment? Je ne sais pas. J'ai pris ma copie de sauvegarde et copié toutes les choses concernant ce problème à ma version actuelle. C'était juste la même chose, un code absolument identique. Je viens de remplacer le code actuel par le même code de sauvegarde et cela fonctionne maintenant. Ca c'était quoi? Je sais à 100% qu'il n'y a pas de différences entre eux, c'est un petit morceau de code.

Malheureusement, je ne peux rien marquer comme une réponse, car il n'y a que des commentaires ici. Je vais marquer celui-ci.

Quoi qu'il en soit, merci, les gars. Un grand merci à Tim pour son attention à tout et Richard Deeming pour ses suggestions.

Questions connexes