2010-05-26 7 views
0

La version courte:mise à jour ASP.NET SqlDataSource et créer FK référence

Je trouve une grille liée à une source de données qui a un SelectCommand avec une gauche se joindre à elle parce que le FK peut être nul. Lors de la mise à jour, je veux créer un enregistrement dans la table FK si le FK est nul, puis mettre à jour la table parent avec le nouvel ID d'enregistrements. Est-ce possible avec SqlDataSources?

La version détaillée:

J'ai deux tables: Société et adresse. La colonne Company.AddressId peut être nulle. Sur ma page ascx, j'utilise une SqlDataSource pour sélectionner une jointure gauche de la société et de l'adresse et une GridView pour afficher les résultats. En ayant mes UpdateCommand et DeleteCommand de SqlDataSource exécuter deux instructions séparées par un point-virgule je suis capable d'utiliser la fonctionnalité Modifier et Supprimer de GridView pour mettre à jour les deux tables simultanément.

Le problème que j'ai est quand le Company.AddressId est nul. Ce que je dois avoir, c'est que la source de données crée un enregistrement dans la table d'adresse et puis met à jour la table de compagnie avec le nouvel Address.ID puis continue la mise à jour comme d'habitude. Je voudrais le faire avec seulement des sources de données si possible pour des raisons de cohérence/simplicité. Est-il possible d'avoir ma source de données faire cela, ou peut-être ajouter une deuxième source de données à la page pour gérer une partie de cela? Une fois que cela fonctionne, je peux probablement aussi comprendre comment le faire fonctionner avec la commande InsertCommand, mais si vous êtes sur un pied d'égalité et que vous avez une réponse sur la manière de le faire voler, n'hésitez pas à le fournir.

Merci.

Répondre

0

exécuter deux instructions séparées par un point-virgule

Je ne vois aucune raison pour laquelle il ne serait pas possible de faire les deux INSERT et UPDATE dans deux états avec SqlDataSource comme vous faites ici. Toutefois, si vous avez beaucoup de trafic ou que vous utilisez simultanément l'application, vous pouvez rencontrer des problèmes simultanés où un utilisateur fait quelque chose qui affecte un autre utilisateur et des résultats inattendus peuvent provoquer une cascade et un désordre. vos données En général, pour des choses comme ce que vous faites - INSERT et UPDATE impliquant des clés primaires ou étrangères, habituellement des TRANSACTIONS SQL sont utilisées. Mais, vous devez les exécuter en tant que procédures stockées SQL (ou fonctions), sur votre base de données SQL. Vous pouvez toujours les appeler à partir de votre SqlDataSource en indiquant simplement que vous appelez une procédure stockée.

Questions connexes