Die Umwandlung von DbCommand-Objekt OracleCommand-Objekt
Habe ich geerbt, eine Funktion in einer ASP.NET (C#) Anwendung, in dem der Autor verwendet die Microsoft.Practices.EnterpriseLibrary.Data library
, aber ich wurde gebeten es zu ändern, so dass es verwendet System.Data.OracleClient
. Diese Funktion verwendet eine gespeicherte Prozedur form einer Datenbank. itemName
, und openDate
sind string-Parameter, den die Funktion annimmt. PKG_AUCTION_ITEMS.IsAuctionItem
ist die gespeicherte Prozedur name der Funktion.
Hier ist der code, den ich erhielt:
string result = String.Empty;
Database db = DatabaseFactory.CreateDatabase("OraData");
using (DbCommand cmdDB = db.GetStoredProcCommand("PKG_AUCTION_ITEMS.IsAuctionItem"))
{
db.AddInParameter(cmdDB, "vItemName", DbType.String, itemName);
db.AddInParameter(cmdDB, "vOpenDate", DbType.String, openDate);
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
db.ExecuteNonQuery(cmdDB);
result = cmdDB.Parameters["ret"].Value.ToString();
}
Hier ist mein code:(connstr
ist der connection-string)
string result = String.Empty;
OracleConnection conn = new OracleConnection(connstr);
OracleCommand cmd = new OracleCommand("PKG_AUCTION_ITEMS.IsAuctionItem",conn);
myCmd.CommandType = CommandType.StoredProcedure;
using (myCmd)
{
myCmd.Parameters.AddWithValue("vItemName", itemName);
myCmd.Parameters.AddWithValue("vOpenDate", openDate);
myCmd.Parameters.AddWithValue("ret", ???);
myCmd.ExecuteNonQuery();
result = myCmd.Parameters["ret"].Value.ToString();
}
Ich verstehe nicht, was der Unterschied zwischen AddInParameter und AddParameter ist, und was diese Zeile macht:
db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null);
Bin ich auf dem richtigen Weg? Kann mir jemand bitte helfen?
Dank
Microsoft.Praxis-Bibliothek ist nicht ein standard-Bibliothek verwendet, hier also die build-engine nicht hat.Weil dieser, das Projekt kann nicht erstellt werden, auf dem server.
Vermutlich haben Sie sich zur Installation der Enterprise Library auf Ihrem web-server zu machen, damit es funktioniert.
InformationsquelleAutor zohair | 2009-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
db.AddParameter fügt ein output-parameter in diesem Fall. Sie lassen die db-client-Bibliothek, die wissen, dass Sie suchen, um die Rückkehr Wert zurück, aus dem sproc nennen. Daher der Aufruf an AddParameter. db.AddInParameter fügt einen parameter, der nur ein in-parameter. In der It ist eine Abkürzung für die db.AddParameter mit ParameterDirection.Input. Sehen http://blogs.x2line.com/al/archive/2006/03/25/1579.aspx für eine Diskussion der AddInParameter vs. AddParameter.
Ähnlich, mit OracleClient, AddWithValue ist wie AddInParameter-- einen shortcut zu verwenden, für die input-Parameter, wenn Sie bereits wissen, den Wert. Da der Rückgabewert ist, per definition, ein output-parameter, die Sie nicht verwenden können AddWithValue. Sie benötigen, um die Parameter zu verwenden.Add() statt.
Nun, zurück zu deiner wichtigsten Frage: was ist der entsprechende code mit OracleClient. Es ist so etwas wie dieses:
AddInParameter
wenn ich mitOracleClient
?Ich würde die parameter separat eingestellt ParameterDirection.ReturnValue, und dann, und Parameter verwenden.Add(). Siehe oben-- ich bearbeitet habe, die Antwort zu zeigen, ein code-Beispiel.
Danke! Dies funktioniert perfekt!
InformationsquelleAutor Justin Grant
Wir haben die Konfiguration der Parameter immer explizit, so etwas wie dieses
Sehen Sie, es ist eine Eigenschaft, die Richtung, die wir ausdrücklich weisen für den parameter, der zurückgegeben wird. Der erste bekommt den Wert der Variablen "id" und ist ein parameter, wird AN die gespeicherte Prozedur übergeben.
Die 2. wird von der gespeicherten Prozedur zurückgegeben, daher kein Wert zugewiesen wird, der parameter Wert und die Richtung festgelegt ist
"System.Data.ParameterDirection.Output"
InformationsquelleAutor Juri