Frage

Ich arbeite mit einem Datagrid und Adapter, die mit einer MS Access-Tabelle über eine gespeicherte Abfrage entsprechen (mit dem Namen „UpdatePaid“, 3 Paramater wie unten dargestellt) wie folgt:

    OleDbCommand odc = new OleDbCommand("UpdatePaid", connection);

    OleDbParameter param;

    odc.CommandType = CommandType.StoredProcedure;

    param = odc.Parameters.Add("v_iid", OleDbType.Double);
    param.SourceColumn = "I";
    param.SourceVersion = DataRowVersion.Original;

    param = odc.Parameters.Add("v_pd", OleDbType.Boolean);
    param.SourceColumn = "Paid";
    param.SourceVersion = DataRowVersion.Current;

    param = odc.Parameters.Add("v_Projected", OleDbType.Currency);
    param.SourceColumn = "ProjectedCost";
    param.SourceVersion = DataRowVersion.Current;

    odc.Prepare();

    myAdapter.UpdateCommand = odc;

    ...

    myAdapter.Update();

Es funktioniert gut ... aber die wirklich seltsame Sache ist, dass es hat nicht , bis ich in der odc.Prepare put () Anruf.
< br> Meine Frage ist also: Muss ich, dass die ganze Zeit tun, wenn mit OleDb gespeichert procs / Abfragen zu arbeiten? Warum? Ich habe auch ein anderes Projekt kommen, wo ich das Gleiche mit einem SqlDbCommand zu tun habe ... habe ich es mit denen zu tun, auch?

War es hilfreich?

Lösung

Dies ist, seltsam genug genannt, eine vorbereitete Erklärung, und sie sind wirklich sehr nett. Im Grunde, was passiert, ist, dass Sie entweder erstellen oder eine SQL-Anweisung erhalten (einfügen, löschen, aktualisieren) und anstelle von Istwerten vorbei, passieren Sie „?“ als Platzhalter. Das ist alles schön und gut, außer dem, was wir wollen, ist unsere Werte anstelle des „?“ Übergeben werden.

So wir die Aussage so statt „?“ Vorbereiten, gehen wir in den Parametern, wie Sie oben haben, dass die Werte sein werden, die anstelle der Platzhalter hineingehen.

Vorbereiten des String parst zu finden, wo Parameter die Fragezeichen ersetzen können, so alles, was Sie tun müssen, ist die Parameterdaten eingeben und den Befehl auszuführen.

Innerhalb OLEDB, sind gespeicherte Abfragen Prepared Statements, ein so vorzubereiten erforderlich ist. Ich habe nicht gespeicherte Abfragen mit sqldb verwendet, so würde ich auf die 2 Antworten zu verschieben haben vorherige.

Andere Tipps

Ich verwende es nicht mit SqlDbCommand. Es scheint, als Fehler zu mir, dass es erforderlich . Es sollte nur schön haben , wenn Sie eine Prozedur mehr Male in einer Reihe nennen gehen. Ich bin falsch und es gibt vielleicht einen Hinweis in der Dokumentation über Anbieter, die diesen Ruf zu viel lieben.

Sind Sie mit dem JET OLEDB-Provider? oder MSDASQL + JET ODBC?

Sie sollten nicht brauchen Prepare() zu nennen, aber ich glaube, dass der Fahrer / providerabhängig.

Sie definitiv nicht brauchen Prepare() für System.Data.SqlClient zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top