2012-03-24 1 views
0

J'ai une base de données ms-access appelée db.mdb et elle contient diverses tables. Je crée une page de création de compte avec ASP.NET et VB.NET.ASP.NET - Entrée VB.NET dans MS-ACCESS avec auto-incrémentation

J'essaie d'entrer des champs dans la page dans ms-acess db mais quand j'ouvre la base de données, il n'y a pas de valeurs entrées malgré que le développement web ne montre aucune erreur.

Pouvez-vous m'aider?

Voici le code:

Imports System.Data 
Imports System.Data.OleDb 
Imports System.Data.Odbc 



Partial Class _Default 
    Inherits System.Web.UI.Page 

    Protected Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles txtName.TextChanged 

    End Sub 

    Protected Sub btnCreateAccount_Click(sender As Object, e As System.EventArgs) Handles btnCreateAccount.Click 

     Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Brian\Documents\Visual Studio 2010\WebSites\WebSite3\db.mdb;User Id=admin;Password=;") 

     Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO [USER] (UserName, UserSurname, Address, Country, TelNo, UserLogin, UserPassword, UserTypeID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", conn) 




     If txtPass.Text = txtCPass.Text Then 

      conn.Open() 


      cmd.Parameters.Add("@UserName", OleDbType.VarChar, 255).Value = txtName.Text 
      cmd.Parameters.Add("@UserSurname", OleDbType.VarChar, 255).Value = txtSurname.Text 
      cmd.Parameters.Add("@Address", OleDbType.VarChar, 255).Value = txtUsername.Text 
      cmd.Parameters.Add("@Country", OleDbType.VarChar, 255).Value = txtCountry.Text 
      cmd.Parameters.Add("@TelNo", OleDbType.Integer).Value = txtTelNo.Text 
      cmd.Parameters.Add("@UserLogin", OleDbType.VarChar, 255).Value = txtUsername.Text 
      cmd.Parameters.Add("@UserPassword", OleDbType.VarChar, 255).Value = txtPass.Text 
      cmd.Parameters.Add("@UserTypeID", OleDbType.VarChar, 255).Value = "U" 





      cmd.ExecuteNonQuery() 

      conn.Close() 
      lblAccount.Visible = True 



     End If 

    End Sub 
End Class 

EDIT:

Je suis en train de autonumber le champ UserID. Il est défini comme numéro automatique de la base de données d'accès. Chaque fois que j'essaie d'entrer les détails dans la page de la page, cela ne me le permet pas, me donnant une erreur que le champ NuméroAuto ne peut pas être NULL. Donc, j'ai ajouté le morceau de code:

newID = Int32.Parse(cmd2.ExecuteScalar()) + 1 

Alors que je reçois le nombre maximum de cette colonne dans la table et l'incrément par 1, puis ajouté avec l'autre commande.

cmd.Parameters.Add("@UserID", OleDbType.VarChar, 255).Value = newID 

Cependant, sa me donne une erreur disant

Conversion from type 'DBNull' to type 'String' is not valid. 

Répondre

0

Vous avez pas ouvrir la connexion avant d'appeler cmd2.ExecuteScalar() Fonction. Et le premier paramètre est faux. Devrait être @UserID au lieu de @Address.

conn.Open() 
newID = Int32.Parse(cmd2.ExecuteScalar()) + 1 
'Not sure what is column type (Varchar or Int) 
cmd.Parameters.Add("@UserID", OleDbType.Integer, 2).Value = newID 
... 
cmd.ExecuteNonQuery() 
conn.Close() 
+0

ahh ok merci. mais maintenant il me donne une nouvelle erreur dans cette ligne 'Dim cmd2 As OleDbCommand = Nouvelle OleDbCommand (" SELECT MAX (UserID) FROM UTILISATEUR ", conn)' disant theres une erreur dans le 'FROM' – Brian

+0

Essayez - SELECT MAX (UserID) DE [UTILISATEUR] –

+0

Merci .. chaque problème semble conduire à un autre cependant. J'ai mis à jour la question avec la nouvelle erreur – Brian