2010-11-16 25 views
0

J'ai besoin de répliquer une base de données MS Access dans .NET via un fichier XML que je reçois sur Internet. La base de données cible doit être exactement identique à l'original (même contenu et même PK).Insertion d'AutoNumber avec OleDbDataAdapter

Comme j'ai beaucoup de tables à copier, j'utilise un OleDbDataAdapter qui génère les requêtes d'insertion pour moi. Cela fonctionne bien, même pour les tables dont la clé principale est Guid. La commande INSERT générée par le OleDbCommandBuilder (cmdBuilder.GetInsertCommand()) a le champ Guid dans ses paramètres, de sorte que le guid inséré est le même que le DB source.

Le seul problème que j'ai est avec les tables qui ont un nombre entier d'autonumber comme leur clé primaire. La commande INSERT générée n'inclut pas le champ PK, de sorte que le nombre inséré ne correspond pas à la base de données source lorsqu'il y a des trous dans la séquence.

Y a-t-il une propriété cachée quelque part qui inclura la colonne autonumber lorsque la commande insert est générée?

Voici mon code:

public void InsertContentFromXml(string tableName, string xml) 
{ 
    using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", _connection)) 
    { 
     OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 
     OleDbCommand insertCommand = builder.GetInsertCommand(); 
     // insertCommand does not have the autonumber column in its insert query 
    } 
} 

La table a 3 champs:
IdReport [entier/autonumber]
ReportName [Texte]
ReportType [Texte]

La commande d'insertion génère 2 paramètres: ReportName et ReportType

Merci

Répondre

0

Vous devez créer la commande INSERT et ses paramètres vous-même.

+0

Il n'y a pas de meilleure solution? J'ai ~ 80 tables à insérer dans, ce qui fait beaucoup de requêtes à écrire. –

+0

@AlexB: Vous pouvez essayer de modifier les commandes 'commandText' et' Parameters' de 'insertCommand' générées. – SLaks

+0

Je pourrais mais je n'ai aucun moyen de savoir si la table actuelle a un champ AutoNumber (rappelez-vous que j'ai ~ 80 tables à insérer dans). 'DataSet.Tables [0] .Columns [" IdReport "]. AutoIncrement' renvoie false et' DataSet.Tables [0] .Columns ["IdReport"]. AllowDbNull' renvoie true pour ma colonne AutoNumber. Je suppose que c'est pour laisser le serveur insérer la valeur correcte. –