2009-02-27 9 views
0

Je suis un débutant total à l'entreprise .net C# et j'ai plongé la semaine dernière en créant une application de formulaire pour mélanger les données autour des configurations SSIS. Les génies de MS ont décidé de ne pas appliquer une clé à la table avec laquelle je travaille - et générer une clé composite des deux champs candidats ne fonctionnera pas car leur longueur combinée est trop longue. Je ne veux surtout pas jouer avec le schéma de la table [ssis configurations] en ajoutant un champ autoincrement.TableAdapter - mise à jour sans clé

J'ai donc eu beaucoup de mal à obtenir une mise à jour d'un contrôle DataGridView pour travailler avec un TableAdapter.

J'ai besoin de l'instruction de mise à jour pour mettre à jour l'ensemble de tables a = x où b = y et c = z. Puis-je définir la méthode de mise à jour du TableAdapter, et si oui, comment. Si non, que faire?

Je vois ce code autogenerated:

this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand(); 
      this._adapter.InsertCommand.Connection = this.Connection; 
      this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[SSIS Configurations Staging] ([ConfigurationFilter], [Configur" + 
       "edValue], [PackagePath], [ConfiguredValueType]) VALUES (@ConfigurationFilter, @C" + 
       "onfiguredValue, @PackagePath, @ConfiguredValueType)"; 

Mais dans mon code de forme, le UpdateCommand n'est pas disponible. Je suppose que c'est parce que le code ci-dessus est une définition de classe que je ne peux pas changer après la création de l'objet. Je vois que ce code a une recommandation de ne pas être modifié puisqu'il est généré automatiquement par VS.

Merci pour votre excellent conseil.

Répondre

2

De votre code, je suppose que vous utilisez un Dataset typé avec le concepteur.

Ne pas avoir de clé primaire est l'une des nombreuses raisons pour lesquelles le concepteur ne générera pas de commandes Insérer, Mettre à jour ou Supprimer. Ceci est une limitation de CommandBuilder.

Vous pouvez utiliser la fenêtre de propriétés pour ajouter une commande de mise à jour à l'Apdapter, mais je vous déconseille de le faire, si vous configurez à nouveau votre requête principale, elle se débarrassera volontiers de tout votre travail. Le même argument empêche de modifier le code dans un fichier * .Designer.cs.

Au lieu de cela, double-cliquez sur la légende avec l'Adaptername. Le concepteur créera (si nécessaire) le fichier source non concepteur associé et y placera l'extérieur d'une classe partielle. Malheureusement, c'est dans quelle mesure la génération de code du concepteur va en C#, vous devrez le prendre à partir de là. (A part: le concepteur VB connaît quelques trucs supplémentaires).

Edit:

Vous devrez fournir votre propre mise à jour (...) la méthode et la configuration d'un UpdateCommand etc.

var updateCommand = new SqlCommand(); 
    ... 
+0

Elle n'a pas généré une instruction UPDATE sur une clé composite - est cela prévu? J'ai changé le type de données de nvarchar en varchar et réduit le nombre total d'octets. – Sam

+0

Je ne suis pas sûr de la clé composite, mais varchar/nvarchar et length ne devraient pas avoir d'importance. –

Questions connexes