Come si fa a copiare DbCommand
parametri ad un altro DbCommand
, voglio un nuovo DbCommand
con gli stessi parametri come il mio ultimo DbCommand
. Ma ora con una stringa sql diversa.Copia parametri da DbCommand all'altra DbCommand
risposta
È potrebbe mettere il codice è necessario ri-uso in un metodo separato:
public DbCommand RecycledParameters(string sql, IList<DbParameter> parameters)
{
var result = db.GetSqlStringCommand(sql);
foreach(DbParameter p in parameters)
{
db.AddInParameter(result, p.ParameterName, p.DbType, p.Value);
}
return result;
}
Se tutto quello che sono dopo è la raccolta parms, si potrebbe provare un metodo di supporto che crea una copia profonda della raccolta .parameters al tuo comando. Vedi se questo sputerà quello che stai cercando.
Non riesco a prendere il merito del metodo ObjectCopier, è solo un metodo di classe base utile che ho ricevuto da un progetto passato.
private DbParameterCollection cloneParms(DbCommand commandWithParms)
{
return ObjectCopier.Clone<DbParameterCollection>(commandWithParms.Parameters);
}
public static class ObjectCopier
{
/// <summary>
/// Perform a deep Copy of the object.
/// </summary>
/// <typeparam name="T">The type of object being copied.</typeparam>
/// <param name="source">The object instance to copy.</param>
/// <returns>The copied object.</returns>
public static T Clone<T>(T source)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable.", "source");
}
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null))
{
return default(T);
}
IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
}
potresti fare qualcosa del genere?
System.Data.Common.DbCommand command = new System.Data.SqlClient.SqlCommand();
System.Data.Common.DbCommand command1 = new System.Data.SqlClient.SqlCommand();
command1.Parameters.AddRange(command.Parameters.Cast<System.Data.Common.DbParameter>().ToArray());
Questo non funzionerà perché non è possibile aggiungere parametri da un comando a un altro, "Aggiungi" lo riconoscerà e genererà un 'ArgumentException'. https://msdn.microsoft.com/en-us/library/ht4eset1(v=vs.110).aspx Il 'Cast' +' ToArray' cambierà la collezione non i parametri, sono sempre le stesse istanze. –
// Copy parameters from cmd1 to cmd2
// Creates an array with new parameters
var nsp = cmd1.Parameters.Cast<ICloneable>().Select(x => x.Clone() as SqlParameter).Where(x => x != null).ToArray();
// Copy parameters into another command
cmd2.Parameters.AddRange(nsp);
- 1. Inserimento NULL in DB SQL da C# DbCommand
- 2. Ottenere la stringa di query SQL da DbCommand con i parametri
- 3. Come creare un DbDataAdapter dato un DbCommand o DbConnection?
- 4. parametri costruttore copia
- 5. Copia da un registro all'altro
- 6. Copia da BitmapSource a WritableBitmap
- 7. Will dbCommand.Close() chiuderà anche la connessione?
- 8. Copia da Mac OS X non copia su iPhone Simulator
- 9. Rischi passaggio da 'Copia sempre' a 'Copia se più recente'
- 10. I compilatori C++ ottimizzano il passaggio dei parametri POD di riferimento const in copia per copia?
- 11. Copia di copia in più posizioni in base all'elenco dei parametri di destinazione?
- 12. "Copia posizione con parametri" per Google Chrome Developer Tools?
- 13. Come ottenere parametri da PreparedStatement?
- 14. Parametri Rails da GET/POST
- 15. Parametri lavoro da Spring Batch
- 16. Copia testo da TextView su Android
- 17. Copia tabella da un database all'altro
- 18. COPIA tavolo cassandra da file CSV
- 19. Copia veloce controllata da istream a ostream
- 20. copia testo da vim a windows
- 21. Copia testo da nano editor a shell
- 22. Evidenzia e copia il codice da jsfiddle
- 23. Copia appunti da iOS Simulator a Mac?
- 24. Copia JsonSerializerSettings da JsonSerializer a nuovo JsonSerializer
- 25. Copia immagine da server remoto su HTTP
- 26. Copia e incolla da fonte esterna
- 27. Copia da modulo a modulo in jQuery
- 28. Gestione degli errori durante una copia da
- 29. Copia dati da IntPtr a IntPtr
- 30. Capire la copia eseguita da memcpy()
c'è qualche altro modo. Se lo facessi dovrei creare una funzione per ogni parametro riciclato che ho. –
Anche quelli come parametri. (Vedi la mia risposta aggiornata) –
come è possibile creare una nuova istanza di DBCommand? Il prototipo del metodo avrebbe dovuto essere pubblico DBCommand AddParameters (DBCommand dbCommand, parametri DBParameterCollection); ora il chiamante può passare qualsiasi tipo che deriva da DBCommand per il primo parametro e per il secondo tipo param che deriva da DBParameterCollection. ex: AddParams (sqlCommand, sqlParameterCollection) –