2016-05-16 9 views
0

ich ausführen wollen (INSERT .. SELECT) Anweisung wie folgt auszuführen:Wie INSERT-Anweisung

cmdTxt.Clear(); 
cmdTxt.Append(" INSERT INTO aast:sc1pen "); 
cmdTxt.Append(" SELECT action_month,action_year,200,emp_num,penalty_action , "); 
cmdTxt.Append(" 'APPLY ' || penalty_reason || ' day ' , 0 , 0 "); 
cmdTxt.Append(" FROM sc2pen WHERE sal_year = ? and sal_month = ? and penalty_type = 1 and pay_type = 0 "); 
myIfxCmd.CommandText = cmdTxt.ToString(); 

myIfxCmd.Parameters.Clear(); 

myIfxCmd.Parameters.Add("sal_year", IfxType.Integer); 
myIfxCmd.Parameters.Add("sal_month", IfxType.Integer); 

myIfxCmd.Parameters[0].Value = penaltyDt.Rows[0]["sal_year"]; 
myIfxCmd.Parameters[1].Value = penaltyDt.Rows[0]["sal_month"]; 

Jetzt verwirrt Ich sollte ich verwenden

myIfxCmd.ExecuteNonQuery(); 

Abfrage auszuführen so, obwohl es Leseoperation enthält?

+0

Haben Sie es getestet? – Gnqz

+0

Ja, benutze myIfxCmd.ExecuteNonQuery(); weil Sie keine Ergebnismenge an den Client zurückgeben. Die Auswahl wird nur zum Quellen der Daten verwendet, um die Einfügung zu füllen. –

Antwort

1

Erstens ist es keine gute Idee, Inline-SQL zu verwenden, da dies keinen wartbaren Code ergibt. Dies sollte idealerweise in der Datenbank innerhalb einer gespeicherten Prozedur geschehen - insbesondere zum Einfügen von Daten in eine bestehende Tabelle. Dann können Sie den SP ausführen und Daten innerhalb eines Ausgabeparameters zurückgeben.

Wenn Sie jedoch wirklich diesen Weg gehen wollen Ausführung dann

ExecuteNonQuery() 

... keine Daten zurückgeben, nur die Datensätze betroffen. Wenn Sie einige Daten zurückgeben möchten, wie die ID des neu eingefügten Datensatz, möchten Sie

ExecuteScalar() 

... verwenden, die einen skalaren Wert zurückgegeben werden können.

+1

Ihre Eröffnungsaussage basiert ausschließlich auf Meinungen. Wenn Sie eine solche Aussage machen, sollten Sie dies mit stichhaltigen Gründen untermauern. Viele Entwickler haben legitime Gründe dafür, ihren SQL-Code inline zu halten. – Fred

+1

FYI: http://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code – Fred

+0

Ja, es ist meine Meinung @Fred . Ich nehme an, es hängt vom Umfang des Projekts ab, an dem Sie arbeiten, und von der Anzahl der verschiedenen Datenbankanforderungen, die Sie erstellen. Ich habe einfach gesagt, dass SQL eine bessere, sauberere, sicherere, effizientere, besser wartbare und wiederverwendbare Lösung darstellt. Gute Argumente für und gegen Inline-SQL in Ihrem Link, aber ich würde immer eine Seite Datenbankabfragesprache setzen, wo es gehört ... in der Datenbank. – Steveo