2009-09-28 7 views
1

J'utilise le code suivant pour élaborer le numéro de commande unique suivant dans une base de données d'accès. ServerDB est un « System.Data.OleDb.OleDbConnection »SELECT à travers oledbcommand dans vb.net pas ramasser les changements récents

Dim command As New OleDb.OleDbCommand("", serverDB) 
command.CommandText = "SELECT max (ORDERNO) FROM WORKORDR" 
iOrder = command.ExecuteScalar() 
NewOrderNo = (iOrder + 1) 

Si je crée ensuite un WORKORDR (en utilisant une autre connexion DB), le code ne sera pas ramasser le nouveau « prochain numéro de commande. »

par exemple.

iFoo = NewOrderNo 
CreateNewWorkOrderWithNumber(iFoo) 
iFoo2 = NewOrderNo 

retournera la même valeur à iFoo et à iFoo2.

Si je ferme puis rouvre serverDB dans le cadre de la fonction "NewOrderNo", cela fonctionne. iFoo et iFoo2 seront corrects.

Existe-t-il un moyen de forcer un "System.Data.OleDb.OleDbConnection" pour actualiser la base de données dans cette situation sans fermer et rouvrir la connexion. par exemple. Y at-il quelque chose d'équivalent à serverdb.refresh ou serverdb.FlushCache

Comment je crée la commande. Je me demandais si cela pouvait être causé par la non mise à jour de mes transactions après la création de la commande. J'utilise un XSD pour la création d'une commande, et le code-je utiliser pour créer l'enregistrement est ...

Sub CreateNewWorkOrderWithNumber(ByVal iNewOrder As Integer) 
    Dim OrderDS As New CNC 
    Dim OrderAdapter As New CNCTableAdapters.WORKORDRTableAdapter 

    Dim NewWorkOrder As CNC.WORKORDRRow = OrderDS.WORKORDR.NewWORKORDRRow 

    NewWorkOrder.ORDERNO = iNewOrder 
    NewWorkOrder.name = "lots of fields filled in here." 

    OrderDS.WORKORDR.AddWORKORDRRow(NewWorkOrder) 
    OrderAdapter.Update(NewWorkOrder) 

    OrderDS.AcceptChanges() 
End Sub 
+0

quelle est exactement cette fonction: faire CreateNewWorkOrderWithNumber (IFoo)? – manji

+0

J'ai inclus le code pour CreateNewWorkOrderWithNumber. – seanyboy

Répondre

1

De MSDN

Microsoft Jet a un cache de lecture qui est mis à jour toutes les PageTimeout millisecondes (valeur par défaut est 5000ms = 5 secondes). Il a également un mécanisme paresseux-écriture que fonctionne sur un thread distinct au traitement principal et écrit donc les modifications au disque de manière asynchrone. Ces deux mécanismes aident à améliorer les performances, mais dans certaines situations qui nécessitent haute simultanéité, ils peuvent créer des problèmes .

  • Si vous le pouvez, il suffit d'utiliser une connexion.
  • Retour dans VB6 vous pouvez force the connection pour se rafraîchir en utilisant ADO. Je ne sais pas si c'est possible avec VB.NET. Mon Google-fu semble être faible aujourd'hui.
  • Vous pouvez change the PageTimeout value in the registry mais qui aura une incidence sur tous les programmes sur l'ordinateur qui utilisent le moteur Jet (à savoir l'utilisation programmatique des bases de données Access)
1

Je jette toujours loin d'un objet de connexion après je l'ai utilisé. En raison de la mise en commun des connexions, l'obtention d'une nouvelle connexion est bon marché.

Questions connexes