¿Cómo se copia DbCommand
parámetros a otro DbCommand
, quiero un nuevo DbCommand
con los mismos parámetros que mi último DbCommand
. Pero ahora con una cadena sql diferente.Copiar parámetros de DbCommand a otro DbCommand
Respuesta
Usted podría poner el código que necesita para volver a usar en un procedimiento separado:
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;
}
Si todo lo que está después es la colección parms, podría intentar un método de ayuda que crea una copia profunda de la colección .parameters en tu comando. Vea si esto escupirá lo que está buscando.
No me puedo atribuir el mérito del método ObjectCopier, es solo un método de clase base útil que obtuve de un proyecto anterior.
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);
}
}
}
¿podría hacer algo como esto?
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());
Esto no funcionará porque no puede agregar parámetros de un comando a otro, 'Add' lo reconocerá y arrojará una' ArgumentException'. https://msdn.microsoft.com/en-us/library/ht4eset1(v=vs.110).aspx El 'Cast' +' ToArray' cambiará la colección, no los parámetros, siguen siendo las mismas instancias. –
// 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. ¿Es necesario desechar DbCommand después del uso?
- 2. Insertar NULL a SQL DB desde C# DbCommand
- 3. DbCommand y SQL parametrizado, ORACLE vs SQL Server
- 4. ¿Cómo crear un DbDataAdapter dado un DbCommand o DbConnection?
- 5. Cómo copiar de un lienzo a otro
- 6. Copiar de un registro a otro
- 7. ¿Puedo copiar .git a otro directorio?
- 8. R: copiar/mover un entorno a otro
- 9. Copiar objeto en otro
- 10. copiar los parámetros del constructor
- 11. ¿Copiar objetivos de un proyecto de Xcode a otro?
- 12. Copiar contenidos de un cuadro de texto a otro
- 13. ¿Cómo copiar mis archivos de un directorio a otro?
- 14. TFS "Copiar" el valor de un campo a otro
- 15. Copiar std :: mapa de datos a otro mapa
- 16. cómo copiar módulos de un virtualenv a otro
- 17. ¿Cómo puedo copiar los artefactos de Teamcity a otro servidor?
- 18. ¿Cómo copiar propiedades de un bean Java a otro?
- 19. ¿Cómo copiar un PNG desde otro PNG?
- 20. Arrays enteros de Postgres como parámetros?
- 21. Cómo copiar datos de otro libro de trabajo (excel)?
- 22. ¿Es posible copiar una Plantilla de Objeto de trabajo de un proyecto a otro?
- 23. cómo copiar de un objeto de cadena de caracteres a otro en C++?
- 24. VBA - ¿Cómo copiar una fila en Excel de un libro de trabajo a otro?
- 25. Cómo copiar y pegar archivos en Fuentes de compilación de un destino a otro?
- 26. ¿Por qué después de copiar el repositorio de git a otro directorio, he modificado los archivos?
- 27. Cómo puedo copiar mediante programación todos los atributos de estilo de un elemento DOM a otro
- 28. SQL Server 2005, cómo copiar un Diagrama de base de datos a otro servidor
- 29. Comando de Unix para copiar la última línea de archivo a otro archivo
- 30. Copiar datos de SQL Server de un servidor a otro en un horario
¿hay alguna otra manera. Si hiciera esto, tendría que crear una función para cada parámetro reciclado que tenga. –
Pase esos como parámetros también. (Vea mi respuesta actualizada) –
¿cómo pueden crear una nueva instancia de DBCommand? El prototipo del método debería haber sido DBCommand AddParameters públicos (parámetros DBCommand dbCommand, DBParameterCollection); ahora la persona que llama podría pasar cualquier tipo que derive de DBCommand para el primer param y para el segundo tipo de param que se deriva de DBParameterCollection. ej .: AddParams (sqlCommand, sqlParameterCollection) –