2012-03-24 5 views
0

Ich habe eine MS-Access-Datenbank namens db.mdb und es enthält verschiedene Tabelle. Ich erstelle eine Kontoerstellungsseite mit ASP.NET und VB.NET.ASP.NET - VB.NET Eingabe in MS-ACCESS mit Autoinkrement

Ich versuche, Felder innerhalb der Seite in ms-acess db einzugeben, aber wenn ich die db öffne, werden keine Werte eingegeben, obwohl Web-Entwicklung keine Fehler zeigt.

Können Sie mir bitte helfen?

Dies ist der 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:

So die Benutzer-ID-Feld numerieren Ich versuche. Es ist als automatische Nummer aus der Access-Datenbank festgelegt. Immer wenn ich versuche, die Details in die Seite von der Seite einzugeben, wird es mir nicht erlauben, mir einen Fehler zu geben, dass das Feld AutoNumber nicht NULL sein kann. So habe ich das Stück Code:

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

so, dass ich die maximale Anzahl von dieser Spalte in der Tabelle erhalten und erhöhen sie um 1 und dann mit dem anderen Befehl hinzugefügt.

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

jedoch unter Angabe der mir eine Fehlermeldung,

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

Antwort

0

Sie haben nicht die Verbindung öffnen, bevor cmd2.ExecuteScalar() aufrufen Funktion. Und der erste Parameter ist falsch. Sollte @UserID anstelle von @Address sein.

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 danke. aber jetzt gibt es mir einen neuen Fehler in dieser Zeile 'Dim cmd2 As OleDbCommand = Neuer OleDbCommand (" SELECT MAX (UserID) FROM USER ", conn)' sagen, es gibt einen Fehler in der 'VON' – Brian

+0

Versuchen Sie - SELECT MAX (UserID) FROM [USER] –

+0

Danke .. jedes Problem scheint zu einem anderen zu führen. Ich aktualisierte die Frage mit dem neuen Fehler – Brian