Jak kopiować DbCommand
parametrów do innego DbCommand
, chcę nowy DbCommand
z tymi samymi parametrami jak mój ostatni DbCommand
. Ale teraz z innym ciągiem sql.Kopiowanie parametrów z DbCommand do innego DbCommand
Odpowiedz
Ty mógłby umieścić kod potrzebny do ponownego wykorzystania w odrębnym sposobem:
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;
}
Jeśli wszystko to po to zbiór param, można spróbować metody pomocnika, który tworzy głęboką kopię kolekcji .parameters na twoje polecenie. Sprawdź, czy to wypluje to, czego szukasz.
Nie mogę wziąć kredytu za metodę ObjectCopier, to tylko przydatna metoda klasy bazowej, którą otrzymałem z poprzedniego projektu.
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);
}
}
}
Czy możesz zrobić coś takiego?
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());
To nie zadziała, ponieważ nie można dodawać parametrów z jednego polecenia do drugiego, 'Dodaj' rozpozna je i rzuci" ArgumentException ". https://msdn.microsoft.com/en-us/library/ht4eset1(v=vs.110).aspx "Cast" + "ToArray" zmieni kolekcję, a nie parametry, są to wciąż te same instancje. –
// 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. Wyjątek w Dodaj parametr do DbCommand
- 2. Wstawianie wartości NULL do SQL DB z C# DbCommand
- 3. Kopiowanie NSMutableArray do innego
- 4. Kopiowanie wszystkich elementów mapy do innego
- 5. Kopiowanie jednego strumienia std do innego efektywnie
- 6. Kopiowanie nieśledzonego folderu do innego oddziału
- 7. lista kopiowanie plików z jednego folderu do innego w R
- 8. Git kopiowanie zmian z jednego oddziału do innego
- 9. Kopiowanie zawartości wierszy i formatowanie (do innego arkusza)
- 10. Kopiowanie dwie tablice dwuwymiarową tablicę do innego dwuwymiarowego Java
- 11. Kopiowanie kluczy i certyfikatów do innego Mac dla iPhone rozwoju
- 12. C++ kopiowanie zawartości określony wektor do innego wektora
- 13. Kopiowanie bloki do innego ekranu MIT App Inventor
- 14. Kopiowanie z BitmapSource do WritableBitmap
- 15. Kopiowanie danych z IntPtr do IntPtr
- 16. kopiowanie katalogu z zasobów do folderu danych
- 17. WPF: Kopiowanie z DataGrid
- 18. Kopiowanie zawartości arkusza do innego płótna podobnego do aplikacji amaziografu iPhone'a
- 19. przyspieszyć sql INSERTs
- 20. skopiuj jeden wiersz z jednego datatable do innego
- 21. Schowek Kopiowanie obiektów do iz
- 22. DataGridView: Kopiowanie zakończone do schowka
- 23. Kopiowanie z jednego rejestru na inny
- 24. std :: stringstream skuteczny sposób na zapisywanie danych, kopiowanie do innego strumienia
- 25. kopiowanie arkusza skoroszytu do arkusza innego skoroszytu przy użyciu apache POI i java
- 26. Java - Kopiowanie pliku do innego katalogu przy użyciu FileUtils i copyFileToDirectory - nie działa -?
- 27. Na click - kopiowanie do schowka
- 28. Kopiowanie zakresu i wklejanie do nowego skoroszytu
- 29. nie jest paczką parametrów innego typu niż "nieważne ..."?
- 30. kopiowanie całej zawartości folderu do innego folderu za pomocą pliku wsadowego?
jest jakiś inny sposób. Gdybym to zrobił, musiałbym stworzyć funkcję dla każdego odzyskanego przeze mnie parametru. –
Przekaż te parametry również jako parametry. (Zobacz moją zaktualizowaną odpowiedź) –
w jaki sposób można utworzyć nowe wystąpienie polecenia DBCommand? Prototyp metody powinien być publicznym DBCommand AddParameters (DBCommand dbCommand, DBParameterCollection parameters); teraz wywołujący może przekazać dowolny typ, który wywodzi się z DBCommand dla pierwszego parametru i dla drugiego typu parametru, który wywodzi się z DBParameterCollection. np: AddParams (sqlCommand, sqlParameterCollection) –