2008-12-06 5 views
2

J'ajoute un dossier comme celui-ci:Obtenir clé primaire après une insertion dans asp.net (de base visuelle)

Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb") 
    Dim odbconBanking As New OleDbConnection _ 
      ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" + pathString) 
    Dim sql As String 
    sql = "INSERT INTO tblUsers (FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _ 
       " VALUES ('" & firstName & "', '" & lastName & "', '" & address & _ 
      "', '" & city & "', '" & province & "', '" & zip & "', '" & phone & "', '" & username & "', '" & password & "');" 
    odbconBanking.Open() 
    Dim cmd As New OleDbCommand(sql, odbconBanking) 
    cmd.ExecuteNonQuery() 
    odbconBanking.Close() 

La clé primaire est un champ NuméroAuto appelé UserID. Alors, comment puis-je obtenir la clé primaire de l'enregistrement que je viens d'insérer?

Merci.

Répondre

5

Je crois qu'une requête paramétrées ressemblerait à quelque chose comme ceci:

Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb") 
Dim odbconBanking As New OleDbConnection _ 
    ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
    "Data Source=" + pathString) 
Dim sql As String 
sql = "INSERT INTO tblUsers (FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _ 
     " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" 
odbconBanking.Open() 
Dim cmd As New OleDbCommand(sql, odbconBanking) 

//Add Params here 
cmd.Parameters.Add(new OdbcParameter("@FirstName", firstName)) 
cmd.Parameters.Add(new OdbcParameter("@LastName", lastName)) 
//..etc 

//End add Params here 

cmd.ExecuteNonQuery() 
Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking) 
uid = newcmd.ExecuteScalar 

odbconBanking.Close() 

Ma syntaxe pourrait être un peu hors que je suis plus habitué à utiliser le serveur Sql bibliothèque et pas la bibliothèque Odbc, mais cela devrait vous aider à démarrer.

4

"SELECT @@IDENTITY" juste après l'insertion devrait fonctionner avec Microsoft.Jet Provider.

2

Vous voulez ajouter

;select scope_identity(); 

après votre requête, et exécutez ExecuteScalar pour récupérer la valeur. En outre, sur une note complètement indépendante, vous devriez vraiment changer votre code pour utiliser des requêtes paramétrées afin de ne pas être pris avec des attaques par injection SQL, ou des plantages dus à des chaînes incorrectement enchaînées concaténées dans votre instruction sql.

+0

Comment effectuer des requêtes paramétrées? – Gezim

2

Vous l'avez. Voici comment le code ci-dessus ressemble maintenant:

Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb") 
    Dim odbconBanking As New OleDbConnection _ 
      ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" + pathString) 
    Dim sql As String 
    sql = "INSERT INTO tblUsers (FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _ 
       " VALUES ('" & firstName & "', '" & lastName & "', '" & address & _ 
      "', '" & city & "', '" & province & "', '" & zip & "', '" & phone & "', '" & username & "', '" & password & "');" 
    odbconBanking.Open() 
    Dim cmd As New OleDbCommand(sql, odbconBanking) 
    cmd.ExecuteNonQuery() 
    Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking) 
    uid = newcmd.ExecuteScalar 

    odbconBanking.Close() 
1

La manière la plus simple serait de générer votre valeur uniqueIdentifier au niveau du code, de l'ajouter à votre chaîne et de l'envoyer au serveur.

Dim sql As String, _ 
    myNewUserId as variant 

myNewUserId = stGuidGen 'this function will generate a new GUID value)' 
sql = "INSERT INTO tblUsers (userId, LastName)" & _ 
     " VALUES ('" & myNewUserId & "','" & LastName);" 

Vous pouvez vérifier une proposition de stGuidGen guid code généré here. Cette technique côté client est claire, propre et utile

Questions connexes