2009-02-22 14 views
1

J'ai besoin d'insérer de nouveaux enregistrements dans une base de données Access.
J'utilise Visual Studio 2008 et d'abord créer un site Web asp.net. Je peux me connecter aux informations dans la base de données Access à l'aide de dataview ou de gridview et peut interroger une entrée particulière (par exemple, le numéro de proposition - ajoute tous les détails liés à cette proposition).
Je peux ensuite modifier les détails de cette proposition et cela mettrait à jour la base de données Access.
Ce que je dois faire est d'avoir un formulaire qui entre simplement de nouveaux détails pour un nouveau client. ie. Entrez le nom [____] Entrez l'adresse [____]. Ensuite, pour cela, mettre à jour la base de données. En utilisant la vue de grille ou la vue de données, je suis capable d'afficher tous les champs qui existent dans la table et de les éditer. Existe-t-il un moyen d'obtenir un modèle gridview/dataview vide (qui inclut tous les champs de la table) et de le remplir pour ensuite mettre à jour la base de données? MerciComment insérer de nouvelles entrées dans une table Access db via un site Web ASP.net?

Répondre

2

La manière habituelle de permettre à l'utilisateur final d'ajouter un nouvel enregistrement à une base de données est en présentant à l'utilisateur un ensemble de commandes pour remplir et/ou sélectionnez-à-dire un certain nombre des zones étiquetées textbox, listbox, checkbox, etc.

La façon de les aménager dépend de vous, et vous pouvez les agencer pour imiter votre grille. Je recommanderais de créer un contrôle utilisateur, puis l'utiliser dans votre page.

EDIT:

Pour répondre à vos commentaires sur la façon d'ajouter les champs comme un enregistrement à la base de données, vous feriez quelque chose comme ce qui suit (ce qui est en C#)

Tout d'abord, mettre en place ajoutez une chaîne de connexion à la section connectionstrings dans votre web.config. Il est généralement conseillé de les mettre en place ici si vous allez utiliser la même source de données tout au long de votre application, car il vous évite d'avoir à écrire la chaîne de connexion à chaque fois

<connectionStrings> 
<add name="myConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|db1.mdb" 
providerName="System.Data.OleDb" /> 
</connectionStrings> 

Puis, dans la code-behind pour votre page

protected void AddButton_Click(object sender, EventArgs e) 
    { 
     AddRecordToDatabase(txtCustomerName.Text, txtPlaceOfBirth.Text); 

     /* 
      Where txtCustomerName and txtPlaceOfBirth are the IDs 
      of your Name and Place Of Birth textboxes, respectively. 
      You may want to perform some validation on the textboxes before 
      performing the insert! 
     */ 
    } 

    private void AddRecordToDatabase(string customerName, string placeOfBirth) 
    { 
     OleDbConnection conn; 
     OleDbCommand cmd; 

     using (conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)) 
     { 
      using (cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "INSERT INTO Customers(Name, PlaceOfBirth) VALUES (@name, @place_of_birth)"; 
       cmd.CommandType = CommandType.Text; 

       cmd.Parameters.AddWithValue("@name", customerName); 
       cmd.Parameters.AddWithValue("@place_of_birth", placeOfBirth); 

       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

les déclarations en utilisant disposeront des objets une fois finis avec (ils sont essentiellement des blocs try-finally).En fonction de la version d'Access, il peut être possible de renvoyer une valeur après l'insertion pour indiquer si l'insertion a réussi ou non (je ne connais que Access 97 - 2003). Si cela est possible, vous pouvez utiliser ExecuteScalar au lieu d'ExecuteNonQuery pour obtenir la valeur de retour et répondre en conséquence. Comme un conseil très général, je ne recommanderais pas Jet (le moteur de base de données qu'Access utilise) comme la base de données principale pour un site Web ASP.NET - jetez un oeil à la answers to this question pour des raisons pourquoi. SQL Server 2005 Express est gratuit * et constitue un excellent choix de base de données pour le développement Web.

* Il existe certaines limitations, vérifiez Microsoft Website pour plus de détails.

+0

Ok, une fois que j'ai mis en place les zones de texte étiquetées etc. comment puis-je définir la commande pour mettre à jour la base de données. Comment le lien vers un domaine particulier est-il établi? c'est à dire. Si je voulais créer Name = Chris Lieu de naissance = London. Comment mettre à jour ces champs dans la base de données. Merci – CGF

+0

Il n'utilise pas Access en tant que backend - il utilise Jet. –

+0

@David - C'est un point juste et tout à fait correct. Mettra à jour ma réponse pour clarifier, mais il était clair ce que je voulais dire :) –

2

La meilleure façon de procéder est d'ajouter une table juste en dessous de votre grille et de coller les champs de formulaire. Alternativement, vous pouvez mettre les champs de formulaire dans le < Asp: FooterTemplate de la grille, mais vous devrez les dupliquer dans le < EmptyDataTemplate> pour voir le formulaire ADD lorsque votre grille est vide.

Lorsque l'utilisateur clique sur le bouton AJOUTER, insérez les données du formulaire dans la base de données et relancez la grille pour afficher la nouvelle ligne insérée.

EDITER: pour répondre à votre commentaire, vous devez utiliser le < asp: TemplateFiels> dans votre gridview afin de mettre le "insert form" dans le FoorterTemplate. Je suppose que vous utilisez < asp: BoundField> maintenant.

Encore une fois, je vous recommande de mettre votre "forme d'insertion" dans le tableau juste en dessous de la grille.

Lire this article pour une explication détaillée

+0

Comment coller les champs dans la grille, puis comment insérer les données dans la base de données une fois les données saisies? – CGF

+0

voir mon EDIT, en ce qui concerne l'insertion d'un nouvel enregistrement, utiliser la même source de données que vous utilisez pour Editing and Updating, lui passer les InsertParameters, et appeler la méthode .Insert() –

Questions connexes