DbCommand
パラメータを別のにコピーするにはどうすればよいですか。最後の と同じパラメータを持つDbCommand
新しいが必要です。しかし、今では別の SQL 文字列を使用しています。DbCommand
DbCommand
8974 次
6 に答える
4
// 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);
于 2014-11-06T14:35:41.443 に答える
3
別のメソッドで再利用する必要があるコードを配置できます。
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;
}
于 2011-01-24T05:03:22.010 に答える
2
このようなことができますか?
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());
于 2011-01-24T06:26:18.030 に答える
1
parms コレクションだけが必要な場合は、コマンドで .parameters コレクションのディープ コピーを作成するヘルパー メソッドを試すことができます。これが探しているものを吐き出すかどうかを確認してください。
ObjectCopier メソッドの功績を認めることはできません。これは、過去のプロジェクトから得た便利な基本クラス メソッドにすぎません。
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);
}
}
}
于 2011-01-24T05:30:56.820 に答える