Frage

Ich habe diese SQL Server 2008 UDT:

CREATE TYPE [dbo].[IdentityType] AS TABLE(
    [Id] [int] NOT NULL
)

Ganz einfach. Grundsätzlich ermöglicht es mir zu halten, auf eine Liste von IDs.

Ich habe diese gespeicherte Prozedur:

CREATE PROCEDURE [dbo].[Scoring_ScoreMultipleLocations]
    @LocationIds [IdentityType] READONLY,
    @DoRanking BIT = 0
AS
BEGIN
   -- irrelevant code.
END

Entity Framework 4.0 unterstützt gespeicherte Prozeduren ausgeführt werden, die definierten Benutzer nehmen Tabellentypen als Parameter, so dass ich auf klassische ADO.NET zurückkehrt bin. Die einzige andere Möglichkeit ist eine durch Kommata getrennte String übergeben.

Wie auch immer, ich fand diesen Artikel, aber es ist ein wenig schwer zu folgen .

Ich verstehe nicht, was diese Zeile Code tut:

Table dt = preparedatatable ();

Sie bieten nicht einmal diese Methode, so dass ich keine Ahnung, was ich soll hier tun.

Das ist meine Methode Unterschrift:

internal static void ScoreLocations(List<int> locationIds, bool doRanking)
{
   // how do i create DataTable??
}

Also ich habe eine Liste von int und Notwendigkeit, dass in die UDT zu pumpen.

Kann mir jemand helfen out / zeigen Sie mir einen klaren Artikel auf, wie dies zu erreichen?

War es hilfreich?

Lösung

Dieser Artikel ein bisschen mehr Hilfe sein könnte.

Im Wesentlichen werden Sie eine neue Datentabelle erstellen, die das Schema übereinstimmt, dann geben sie als Parameter.

Der Code von preparedatatable () wahrscheinlich so etwas wie aussehen:

var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
return dt;

Nach dem, würden Sie Ihre locationIds hinzufügen:

foreach(var id in locationIds)
{
    var row = dt.NewRow();
    row["Id"] = id;
    dt.Rows.Add(row);
}

Dann assign dt als Parameter:

var param = cmd.Parameters.AddWithValue("@LocationIDs", dt);
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.IdentityType";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top