2009-03-22 19 views
33

Ich bin mir nicht sicher, ob das möglich ist oder nicht.SqlCommand wiederverwenden?

Ich arbeite derzeit an einem College-Projekt und ich habe eine Funktion, die gespeicherte Prozeduren verwendet. Ich würde gerne wissen, ob es möglich ist, die gleiche SqlCommand Instanz zu nehmen und aktualisierte Parameter anzuwenden, um innerhalb derselben Funktion wieder in die gespeicherte Prozedur zu gelangen.

Lets sagen, dass ich in meinem Code so etwas wie dieses:

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; 
myConn = new SqlConnection(myConStr); 
myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); 
myCommand.CommandType = CommandType.StoredProcedure; 
myCommand.Parameters.AddWithValue("@book_id", bookID); 
myCommand.Parameters.AddWithValue("@user_id", userID); 

try 
{ 
    myConn.Open(); 
    myCommand.ExecuteNonQuery(); 

Ist es möglich, wieder MyCommand ‚s Parameter und rufen Sie die gespeicherte Prozedur zu aktualisieren?

Antwort

40

Ja. Sie sollten sicherstellen, dass Sie myCommand.Parameters.Clear zwischen jedem Aufruf aufrufen, um die Parameter auszugeben, aber Sie können das Objekt nicht erneut verwenden. (Ich verwende C# nicht oft, daher kann dies einen Fehler oder zwei im Text haben)

9

Ja! Das kannst du definitiv tun. Sie können dieselbe Verbindung auch wieder verwenden.

Man könnte auch so etwas tun:

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; 
using (var cn = new SqlConnection(myConStr)) 
using (var cmd = new SqlCommand("team5UserCurrentBooks3", cn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@book_id", SqlDbType.Int).Value = bookID; 
    cmd.Parameters.Add("@user_id", SqlDbType.Int).Value = userID; 

    cn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

Dies ist genau wie Ihre Verbindung in einem try/catch Verpackung sicherstellen, dass es geschlossen wird.

+0

leider Parameter.Add ist jetzt veraltet. Aber ich mag Sie Idee über die Verwendung – Dmitris

+10

@Dmitris, nur die Überladung (Zeichenfolge, Objekt) ist obsolet. Alle anderen Überladungen von Add sind in Ordnung - siehe http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.add.aspx für weitere Informationen. – LukeH