2016-06-23 14 views
1

Verfahren (modifiziert):C# retrieve gespeicherte Prozedur führt

alter procedure searchProgramUnitResult(
    @id char(10) 
) 
as 
begin 
    select id from table1 where id = @id 
end 

Sam Verfahren im DBML Designer (nach der Prozedur in MVC-Projekt zu importieren):

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.searchProgramUnit")] 
public ISingleResult<searchProgramUnitResult> searchProgramUnit([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(10)")] ref string id){ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),id); 
id = ((string)(result.GetParameterValue(0))); 
return ((ISingleResult<searchProgramUnitResult>)(result.ReturnValue)); 
} 

Frage ist, wie kann ich das Ergebnis in einer anderen C# -Klasse abrufen?

public ??Data-type search (string id){ 
    DataContextClass db = new DataContextClass();   
    ??Datatype results = db.searchProgramUnit(id); 
    return results; 
} 
+1

Ihre gespeicherte Prozedurdefinition sieht seltsam aus - Sie geben an, dass '@ id' ein _output_ ist, aber Sie verwenden es wie ein _input_ (und setzen es nie auf etwas). –

+0

versuchen Sie einfach meine Antwort und geben Sie mir eine Rückmeldung, wird dieser Link Ihnen helfen 2 http://StackOverflow.com/Questions/4873607/How-To-use-dbcontext-Database-SqlqueryTeilementsql-Params-with-stored-proced –

Antwort

0

Wenn Sie die gespeicherte Prozedur in Ihrer DbContext zugeordnet haben, können Sie es so nennen:

using (var context = new DataContextClass()) 
{ 
    var courses = context.searchProgramUnit("1"); 

    foreach (table1 cs in table1s) 
     Console.WriteLine(cs.Name); 
} 

ein anderer Ansatz, der auch mit Code Erste funktioniert:

using (var ctx = new DataContextClass()) 
{ 
    var idParam = new SqlParameter 
    { 
     ParameterName = "id", 
     Value = "1" 
    }; 
    var table1List = ctx.Database.SqlQuery<table1>("exec searchProgramUnitResult @id ", idParam).ToList<table1>(); 

    foreach (table cs in table1List) 
     Console.WriteLine("Name: {0}", cs.Name); 
} 

tabelle1 ist Ihr Entitäts-/Klassenname!

+0

this.Database.SqlQuery ("storedProcedureName", params); Dies wird für Sie eine Liste des Entitätstyps zurückgeben, der alles –

+0

ist Ich denke, nach SQL Server 2005 müssen Sie nicht Exec verwenden! –

+1

Ich verwende das Management Studio von SQL Server 2008 R2 und die Ausführungsoption "build-in" hat 'exec' –

0

Fragen Sie nach dem Datentyp?

public List<string> search (string id){ 
    DataContextClass db = new DataContextClass();   
    List<string> results = db.searchProgramUnit(id).ToList(); 
    return results; 
} 
+0

Not Alle Spalten in der Tabelle sind 'string' –

+0

Sie übergeben eine String-ID und geben sie zurück. Wenn Sie alle Spalten in Ihrer SELECT-Anweisung auflisten möchten, erstellt das Entitätsframework ein Ergebnisobjekt. db.searchProgramUnit (id) .ToList() gibt die Auflistung dieses Objekts mit Eigenschaften zurück. Bitte poste die gespeicherte Prozedur, mit der du wirklich arbeitest, weil du ID aus table1 auswählst, wo id = @id nicht wirklich nützlich ist, um das wirkliche Problem zu verstehen. – Dennis