public Task <SpSystemApiInfo> GetSystemApi()
        {
            var ret = new SpSystemApiInfo()
            {
                AppName    = _targetType.Name,
                AppVersion = "*",
                ProcInfos  = _spInfos
            };

            return(Task.FromResult(ret));
        }
Example #2
0
        public async Task <SpSystemApiInfo> GetSystemApi()
        {
            using var sqlConnection = new SqlConnection(ConnectionStringReadOnly);
            using var sqlCommand    = new SqlCommand("api.System_api", sqlConnection);
            var sqlParameters = new List <SqlParameter>()
            {
                new SqlParameter("@context", SqlDbType.NVarChar, -1)
                {
                    Direction = ParameterDirection.InputOutput, Value = "$$"
                },
                new SqlParameter("@api", SqlDbType.NVarChar, -1)
                {
                    Direction = ParameterDirection.Output
                },
            };

            //create command and run it
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddRange(sqlParameters.ToArray());

            sqlConnection.Open();

            try
            {
                await sqlCommand.ExecuteNonQueryAsync();
            }
            catch (SqlException ex)
            {
                HandleException(ex);
                throw;
            }

            var api = sqlParameters.Find(x => x.ParameterName == "@api").Value as string;

            api = api.Replace("'sql_variant'", "'variant'");
            var ret = new SpSystemApiInfo
            {
                ProcInfos  = JsonConvert.DeserializeObject <SpInfo[]>(api),
                AppName    = sqlParameters.Find(x => x.ParameterName == "@appName").Value as string,
                AppVersion = sqlParameters.Find(x => x.ParameterName == "@appVersion").Value as string //context
            };

            //remove @ from param names and add return values
            foreach (var procInfo in ret.ProcInfos)
            {
                foreach (var paramInfo in procInfo.Params)
                {
                    paramInfo.ParamName = paramInfo.ParamName.Substring(1);
                }

                //add return value
                var paramList = procInfo.Params.ToList();
                paramList.Add(new SpParamInfo()
                {
                    IsOutput = true, ParamName = "returnValue", SystemTypeName = "int", UserTypeName = "int", Length = 4
                });
                procInfo.Params = paramList.ToArray();
            }

            return(ret);
        }