2

Es scheint, dass die darin enthaltenen T4-Vorlagen (oder die man im SVN trunk was das betrifft) nur überspringt SPs für MySQL zu erzeugen ... Wenn StoredProcedures.ttinclude läuft zusammen mit MySQL.ttinclude, bekomme ich den Fehler "Übersetzen Transformation: Der Name 'GetSPs' existiert nicht im aktuellen Kontext".Subsonic 3 und Active nicht zu erzeugen MySQL Stored Procedures

GetSPs ist für SQLServer definiert und ich habe gesehen, dass jemand sein eigenes für Oracle geschrieben hat, aber hat jemand eine Ahnung wie die richtige GetSPs() - Methode für MySQL aussehen sollte?

Ich persönlich glaube nicht, dass es wirklich funktionell, wenn ich meine eigene SPs laufen kann:/

Antwort

2

ich um ein wenig mit dem Code von Version gebastelt 2 und kam mit einem kleinen Code auf (wahrscheinlich nicht zu 100% in alle Situationen), die für mich den Trick gemacht haben. Setzen Sie dies in MySQL.ttinclude, um Stored Procedures zu generieren. Genießen!


string[] GetSPList() 
{ 
    var result=new List(); 
    const string sql = "SELECT routine_name FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = ?databaseName"; 
    StringBuilder sList = new StringBuilder(); 

    using(conn=new MySqlConnection(ConnectionString)) 
    { 
     MySqlCommand cmd = new MySqlCommand(sql, conn); 

     cmd.Parameters.AddWithValue("?databaseName", DatabaseName); 
     conn.Open(); 
     using(IDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
     { 
      bool isFirst = true; 
      while(rdr.Read()) 
      { 
       if(!isFirst) 
        sList.Append('|'); 
       isFirst = false; 
       sList.Append(rdr[0]); 
      } 
      rdr.Close(); 
     } 
    } 
    return sList.ToString().Split(new char[] {'|'}, StringSplitOptions.RemoveEmptyEntries); 
} 

List GetSPParams(string spName) 
{ 
    var result=new List(); 
    MySqlCommand cmd = new MySqlCommand(); 
    using(conn=new MySqlConnection(ConnectionString)) 
    { 
     conn.Open(); 
     cmd.Connection = conn; 
     cmd.CommandText = spName; 
     cmd.CommandType = CommandType.StoredProcedure; 

     try 
     { 
      MySqlCommandBuilder.DeriveParameters(cmd); 
     } 
     catch 
     { 
     } 

     if(cmd.Parameters.Count > 0) 
     { 
      foreach(MySqlParameter param in cmd.Parameters) 
      { 
       SPParam p = new SPParam(); 
       p.SysType = GetSysType(param.MySqlDbType.ToString()); 
       p.DbType = param.DbType.ToString(); 
       p.Name = param.ParameterName; 
       p.CleanName=CleanUp(p.Name); 
       result.Add(p); 
      } 
     } 
     conn.Close(); 
    } 

    return result; 
} 

List GetSPs(){ 
    var result=new List(); 
    string[] spNames = GetSPList(); 

    foreach(string spName in spNames){ 
     var sp=new SP(); 
     sp.Name=spName; 
     sp.CleanName=CleanUp(sp.Name); 
     sp.Parameters=GetSPParams(sp.Name); 
     result.Add(sp);   
    } 

    return result; 
} 
+0

Ich würde es lieben, wenn Sie uns bei Github abzweigen könnten! –

1

ich diesen Code bekam durch Zugabe zu meinem MySQL.ttinclude läuft jedoch musste ich getippt Listen sind die generischen Liste ändern. zB: List<SPParam> und List<SP>. Der Code funktionierte danach aber ;-)

0

Laut Craigs Antwort, änderte ich die Listen zu getippten Listen und ich musste auch var result=new List(); aus dem GetSPList() Codeblock entfernen. Prost