2010-03-10 2 views
2

J'ai ici un projet dont le but est de fusionner plusieurs DB d'accès en un seul SQL Server db. Certains enregistrements de la base de données Access sont numérotés automatiquement et ne seront pas uniques dans toutes les bases de données.Comment puis-je modifier le schéma d'une base de données Access en C#

Nous travaillons actuellement sur la modification des champs de numérotation automatique en tant que champs numériques. L'ajustement et l'autorisation d'accès permettent de mettre ces modifications en cascade avant d'ajouter toutes ces tables au serveur SQL.

Je suis conscient de getSchema() pour l'accès, mais pouvons-nous modifier le schéma pour supprimer un numéro automatique d'un champ? A défaut, quelqu'un a-t-il des idées brillantes sur la façon d'accomplir notre tâche? Ou fait quelque chose de similaire?

Cordialement

Répondre

2

Vous pouvez utiliser DDL:

ALTER TABLE Table1 ALTER COLUMN id long 

EDIT re COMMENTAIRE

Vous devez laisser tomber une relation avant de modifier le type de champ, mais un index primaire est très bien:

ALTER TABLE Table2 DROP CONSTRAINT Table1Table2 

La contrainte sera probablement appelée quelque chose sur ces lignes, mais y Vous pouvez utiliser ADOSchemas pour obtenir les noms des contraintes (relations).

+0

Est-ce que ce travail sur une table avec les données existantes? Où le col est le PK? Le FK est-il pour une autre table? – Chris

+0

J'ai ajouté une note. Les données existantes sont correctes si vous passez d'un numéro automatique à un numéro, mais pas l'inverse. – Fionnuala

2

Depuis que vous êtes en train d'embrasser MS-Access, pourquoi ne pas simplement modifier les tables manuellement (clic droit sur les tables et le design)? Il pourrait être plus rapide que d'écrire du code pour faire de même.

Si vous avez vraiment besoin de la méthode programmatique pour faire les choses, ADOX était une API plutôt mature pour manipuler des objets de schéma et c'était la plupart des fonctionnalités complètes pour MS-Access. C'est COM mais vous pouvez utiliser COM interop.

Enterré dans cette page est quelques exemples d'utilisation ADOX pour ajouter des colonnes http://www.codeguru.com/cpp/data/mfc_database/ado/article.php/c4343#_Toc1461080

+0

Nous avons environ 60-100 ms bases de données d'accès à fusionner, par programme est beaucoup plus efficace. Merci, va regarder dans votre lien – Chris