2012-04-13 2 views
0

Ich benutze Entity Framework ExecuteStoreQuery, um eine MySql gespeicherte Prozedur mit Ausgabeparameter aufzurufen. Die Speicherprozedur gibt auch eine Ergebnismenge zurück.ASP.NET MVC EF Aufrufen von MySQL Stored Procedure mit Out-Parametern

Ich bekomme den folgenden Fehler.

OUT oder INOUT Argument 2 für Routine mydb.mysp ist keine Variable oder NEW pseudo-Variable im BEFORE-Trigger

Was ist falsch? Gibt es eine bessere Möglichkeit, MySql sp mit einer Mischung aus Parametern und Resultset aufzurufen?

Hier ist der Code

 var outParam = new MySqlParameter(); 
       outParam.ParameterName = "totalRowsOut"; 
       outParam.MySqlDbType = MySqlDbType.Int64; 
       outParam.Direction = ParameterDirection.Output; 

var data = db.ExecuteStoreQuery<PropertySearchResultRow> 
(
    "call mysp(@input1, @totalRowsOut);", 
    new MySqlParameter("input1", 10), 
    outParam 
); 

var result = data.ToList(); 
int totalRowsCount = (int)outParam.Value; 

Antwort

2

Schließlich endete mit dem ado.net MySqlCommand, um den gespeicherten proc aufzurufen und den out-Wert zu erhalten. Mysql und EF Integration ist schlecht.

0

Sie brauchen nur den Namen der gespeicherten Prozedur zu spezifizieren und in den Parametern übergeben. So etwas wie das

var data = db.ExecuteStoreQuery<PropertySearchResultRow> 
(
    "mysp",new MySqlParameter("input1", 10),outParam 
); 
+0

Hier ist der Fehler: Sie haben einen Fehler in der SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, um die richtige Syntax in der Nähe von 'mysp' zu verwenden. –

-1

Hier ist mein Beispielcode ist mit VS2012 und Mysql-Anschluss 6.8.3 hoffen, dass diese Arbeit hilft jemand

public static IList<MyClass> GetCustOrderHist(string someParameter) 
    { 
     IList<MyClass> data = ((IObjectContextAdapter)TestDashboardEntities).ObjectContext.ExecuteStoreQuery<MyClass>("CALL CustOrderHist({0});", someParameter).ToList(); 

     return data; 
    } 

    public class MyClass 
    { 
     public string ProductName { get; set; } 
     public int TOTAL { get; set; } 
    }