문제

포함 된 T4 템플릿 (또는 그 문제에 대한 SVN 트렁크의 템플릿)은 MySQL에 대한 SP를 생성하는 것만으로도 STREDERPOCEDURES를 실행할 때 MySQL.ttinclude와 함께 클릭 할 때 "컴파일 변환 : 이름"오류를 얻습니다. getsps는 현재 상황에 존재하지 않습니다. "

getsps는 SQLServer에 대해 정의되어 있으며 누군가가 Oracle에 대해 자신의 글을 썼다는 것을 알았지 만, 적절한 getsps ()-메소드가 MySQL에 대해 어떻게 보일지 전혀 알 수 있습니까?

개인적으로 나는 내 자신의 sps를 실행할 수 없다면 정말 기능적이라고 생각하지 않습니다 :/

도움이 되었습니까?

해결책

나는 버전 2의 코드로 약간 땜질을했고 나에게 트릭을 한 작은 코드 (아마도 모든 상황에서 100%가 아님)를 생각해 냈습니다. 이것을 mysql.ttinclude에 넣어 저장된 절차를 생성하십시오. 즐기다!


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;
}

다른 팁

mysql.ttinclude에 추가 하여이 코드를 실행할 수 있었지만 일반 목록을 입력 된 목록으로 변경해야했습니다. 예 : List<SPParam> 그리고 List<SP>. 코드는 그 후에 작동했다 ;-)

Craig의 답변에 따라 목록을 입력 된 목록으로 변경했으며 또한 제거해야했습니다. var result=new List(); ~로부터 GetSPList() 코드 블록. 건배

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top