2010-06-25 13 views
5

Wenn ich einen SqlCommandBuilder verwende, um Updates/Einfügungen/Löschungen auf den Server zu übertragen, muss ich .GetUpdateCommand(), .GetInsertCommand() und .GetDeleteCommand() anrufen?Does SqlCommandBuilder.GetUpdateCommand (müssen) vor der Verwendung SqlDataAdpater.Update() aufgerufen werden?

using (var adapter = new SqlDataAdapter("select * from MyTable", _connection)) 
using (var builder = new SqlCommandBuilder(adapter)) 
{ 
    adapter.Fill(dt); 

    //Magic happens   

    builder.GetUpdateCommand(); //is this line necessary 
    builder.GetInsertCommand(); //is this line necessary 
    adapter.Update(dt); 
} 

Ich habe conflicting gesehen examples auf das, was ist die richtige Vorgehensweise zu tun. Ich weiß, dass es ohne es funktioniert, aber ich wusste nicht, ob es etwas Besonderes hinter den Kulissen getan hat. Ist das notwendig oder ist es Cargo-Kult-Programmierung?

Antwort

5

Ich habe einige Tests auf meiner Test-Datenbank, um zu sehen, ob ich mit einem Szenario kommen könnte, wo ein Fehler auftreten würde, wenn ich nicht GetInsertCommand() angerufen habe. Es stellt sich heraus, dass es passieren kann, in meinem Fall, es geschah, als ich mehrere Tabellen innerhalb einer Datenbank aktualisiert wurde.

Aus irgendeinem Grund, wenn mein 4. Tabelle Aktualisierung nicht richtig einsetzen konnte. Das beunruhigte mich, so habe ich beschlossen, ein wenig mehr Forschung zu tun, die here mich gebracht. Achten Sie genau auf:

Nachdem die Transact-SQL-Anweisung zuerst generiert wurde, muss die Anwendung RefreshSchema explizit aufrufen, wenn sie die Anweisung in irgendeiner Weise ändert. Andernfalls werden die GetInsertCommand noch Informationen aus der vorherige Anweisung, die nicht richtig sein könnte.

Das sagt mir, dass es funktionieren kann, ohne es anzurufen, aber es ist besser, es zu nennen. Ich habe versucht, Gründe dafür zu finden, warum es manchmal funktioniert und manchmal nicht. Aber ich konnte es nicht vollständig herausfinden.

+0

tun müssen, um sie nicht gesetzt, ich frage mich, warum einige Beispiele zu tun. (Ich habe meinen Code ausgeführt, ohne die get-Befehle aufzurufen, und mein Server wurde aktualisiert.) –

Verwandte Themen