Tabelle Value-Parameter mit Dapper gespeicherten Prozeduren
Ich bin versucht, rufen Sie eine gespeicherte Prozedur akzeptiert eine table valued Parameters.
Bin ich folgenden Richtlinien auf diese Frage, Implementierung einer benutzerdefinierten parameter Typ:
internal class IntDynamicParam
{
string name;
IEnumerable<int> numbers;
public IntDynamicParam(string name,IEnumerable<int> numbers)
{
this.name = name;
this.numbers = numbers;
}
public void AddParameters(IDbCommand command)
{
var sqlCommand = (SqlCommand)command;
sqlCommand.CommandType = CommandType.StoredProcedure;
List<Microsoft.SqlServer.Server.SqlDataRecord> number_list = new List<Microsoft.SqlServer.Server.SqlDataRecord>();
//Create an SqlMetaData object that describes our table type.
Microsoft.SqlServer.Server.SqlMetaData[] tvp_definition = { new Microsoft.SqlServer.Server.SqlMetaData("n", SqlDbType.Int) };
foreach (int n in numbers)
{
//Create a new record, using the metadata array above.
Microsoft.SqlServer.Server.SqlDataRecord rec = new Microsoft.SqlServer.Server.SqlDataRecord(tvp_definition);
rec.SetInt32(0, n); //Set the value.
number_list.Add(rec); //Add it to the list.
}
//Add the table parameter.
var p = sqlCommand.Parameters.Add("@" +name, SqlDbType.Structured);
p.Direction = ParameterDirection.Input;
p.TypeName = "int_list_type";
p.Value = number_list;
}
}
bin und versucht, diese wie folgt:
var p = new DynamicParameters();
p.AddDynamicParams(new IntDynamicParam("@IDList", new int[] { 1000, 2000, 3000 }));
p.Add("@StartRow", startRow);
p.Add("@EndRow", endRow);
p.Add("@OrderByField", orderByField.ToString());
p.Add("@OrderBy", orderBy.ToString());
p.Add("@TotalRows", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);
var v = cnn.Query<venue>(spName, p,
commandType: CommandType.StoredProcedure).ToList<IDBVenueLite>();
Jedoch der parameter '@IDList' ist nicht übergeben. Klar AddDynamicParams ist nicht der Weg zu gehen, kann jemand mir helfen?
- Fand diese ältere Frage, die vielleicht helfen: stackoverflow.com/questions/6232978/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Historisch table-valued Parameter, die noch nicht einen großen Fokus in dapper; vor allem, weil Sie nur die Arbeit auf
SqlConnection
(dapper versucht, Ziel-beliebigen Anbieter, darunter "verziert" ADO.NET Anbieter - d.h., wo eineSqlConnection
versteckt sich unter einen wrapper). Was Sie könnte tun ist, implementierenIDynamicParameters
manuell (oder einfach leihen die bestehendenDynamicParameters
Klasse), um diese Funktionalität hinzuzufügen:Ich werde mich auch bemühen, dass die konkrete
DynamicParameters
Klasse vielgestaltiger hier, so dass es auch in Zukunft bauen können Sie nuroverride
eine einzige Methode, zur Erkennung einer TVP-ish Art, und fügen Sie die parameter manuell ein.IDynamicParameters
Umsetzung - Sie müssen nicht auf dieDynamicParameters
Klasse. Es muss nur in der Lage sein, um die Parameter hinzufügen. Benutzen der existierenden als ein Modell ist wahrscheinlich am einfachsten, wenn. Es wäre schön, wenn Sie Erben konnte und esoverride
Verhalten pro-parameter, aber nicht jetzt.