2010-08-06 3 views
1

Je suis nouveau sur C# /. Net et je viens de passer du classique asp (hier). J'essaye quelque chose de très basique pour commencer. J'ai un formulaire statique avec environ 20 questions (textes/textarea/checkbox/dropdown/radio) et il poste à une page de publication avec un bouton soumettre.C# .net post puis écrire à sql db

J'ai besoin de la page de post pour rassembler les questions répondues et les écrire à une base de données sql qui a 1 colonne par question. Je l'ai fait en demandant chaque objet formulaire et en vérifiant s'il était nul/vide et si ce n'est pas le cas dans une variable, j'ai créé une procédure stockée et j'ai passé les 20 paramètres, qui insèrent l'enregistrement.

Ma question est:

Est-il possible que .net fait automatiquement? Par exemple, .net maintient l'état par rapport à l'asp classique, j'avais l'habitude d'écrire le code pour le faire. Je voudrais être en mesure d'appeler quelque chose qui obtient les réponses dans un tableau ou une liste, puis l'écrire à la base de données. Qu'en est-il de Linq to SQL?

+2

Pourquoi avez-vous une colonne par question? Votre table de base de données devrait avoir une ligne par question. Chaque ligne devrait représenter une question avec ses attributs. –

+1

S'il s'agit d'un questionnaire, il y a une ligne par réponse, une colonne par question. Parfaitement raisonnable lorsque vous n'êtes pas en train d'ajouter/modifier/supprimer des questions. Si cela doit changer, alors une autre disposition de table/db serait préférable. –

Répondre

0

Vous aurez des contrôles sur votre page aspx, un par question. Vous devez toujours récupérer la valeur de chaque contrôle dans votre code de publication et l'affecter au paramètre du processus stocké, ou insérer une ligne avec tous les paramètres. Linq to SQL peut être utilisé, mais vous devez toujours saisir les valeurs et les affecter à votre objet table. Voici un exemple de pseudo-code, où dataContext est votre classe linq2sql, et les colonnes de votre table sont appelées q1, q2. txtQ1 est un asp:textbox et dropDownQ2 est asp:dropdownlist.

var row = new Questionnaire(); 
row.q1 = txtQ1.Text; 
row.q2 = dropDownQ2.SelectedValue; 
// etc 
dataContext.Questionnaires.Insert(row); 
dataContext.SubmitChanges(); 
0

Vous aurez toujours besoin de tirer des choses de l'interface utilisateur une à la fois. les placer dans un tableau ou un dictionnaire ou quelque chose est très bien si vous ne devez pas traiter avec 20 variables, mais pour autant que je sache, vous aurez besoin de faire quelque chose comme:

var Answers = new Dictionary<string, string>(); 
Answers["firstName"] = tbxFirstName.Text; 
Answers["lastName"] = tbxLastName.Text; 

LINQ to SQL (ou EF + Linq to Entities) remplace la partie stockée de la procédure/accès à la base de données. Si vous choisissez d'utiliser l'un d'entre eux, vous pouvez simplifier ce qui précède. LINQ to SQL peut générer une classe de réponses pour vous en fonction de votre base de données de réponses - à ce moment-là, vous pouvez plutôt faire quelque chose comme ceci:

using (var context = new QuestionAnswerContext()) { 
    Answers userAnswers = new Answers(); 
    userAnswers.FirstName = tbxFirstName.Text; 
    userAnswers.LastName = tbxLastName.Text; 

    context.Answers.Insert(userAnswers); 
    context.Answers.SubmitChanges(); 
} 
+0

J'ai utilisé la suggestion de Mikael parce que je ne suis pas trop familier avec le dictionnaire et il semblait assez simple pour faire une classe etc J'ai utilisé LINQ to SQL pour exécuter une procédure stockée qui a été passé les 32 valeurs du formulaire row.q1. .. row.q32 then submitchanges() Merci pour votre aide. – Antoni

Questions connexes