Example #1
0
        public async Task <IActionResult> ExecuteStoredProcedure(ProcedureParameters procedureParameters)
        {
            var result = await _dapperRepo.ExecuteStoredProcedure(
                procedureParameters.ProcedureName,
                procedureParameters.ParamsDictionary);

            return(Ok(result));
        }
Example #2
0
        protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
        {
            if (ProcedureType == ProcedureProcedureType.LEGACY)
            {
                throw new NotSupportedException("Legacy type stored procedures are not supported.");
            }

            var command = new PSqlCommand();

            command.Append($"CREATE OR ALTER PROCEDURE {ProcedureName.AsSqlIndentifier()}");
            if (ProcedureInputs > 0)
            {
                var inputs = ProcedureParameters
                             .Where(o => o.ParameterType == ProcedureParameterType.IN)
                             .OrderBy(o => o.ParameterNumber);
                command.Append(" (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(inputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
            }
            command.AppendLine();
            if (ProcedureOutputs > 0)
            {
                var outputs = ProcedureParameters
                              .Where(o => o.ParameterType == ProcedureParameterType.OUT)
                              .OrderBy(o => o.ParameterNumber);
                command.Append("RETURNS (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(outputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
                command.AppendLine();
            }
            command.Append("AS");
            command.AppendLine();
            if (context.EmptyBodiesEnabled)
            {
                command.Append("BEGIN");
                command.AppendLine();
                if (ProcedureType == ProcedureProcedureType.SELECTABLE)
                {
                    command.Append($"  SUSPEND{SqlHelper.Terminator}");
                    command.AppendLine();
                }
                command.Append("END");
            }
            else
            {
                command.Append(ProcedureSource);
            }
            yield return(command);
        }
Example #3
0
        protected static void SetParameters(SqlCommand command, ProcedureParameters parms)
        {
            foreach (SearchCriteria parm in parms.EnumerateSubCriteria())
            {
                String sqlParmName = "@" + parm.GetKey();
                
                if (parm is ProcedureParameter<DateTime?>)
                {
                    ProcedureParameter<DateTime?> parm2 = (ProcedureParameter<DateTime?>)parm;
                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.DateTime);
                        sqlParm.IsNullable = true;
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<DateTime>)
                {
                    ProcedureParameter<DateTime> parm2 = (ProcedureParameter<DateTime>)parm;
                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.DateTime);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<int>)
                {
                    ProcedureParameter<int> parm2 = (ProcedureParameter<int>)parm;

                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Int);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<ServerEntityKey>)
                {
                    sqlParmName = sqlParmName.Replace("Key", "GUID");
                    ProcedureParameter<ServerEntityKey> parm2 = (ProcedureParameter<ServerEntityKey>)parm;

                    if (!parm2.Output)
                    {
                        if (parm2.Value!=null)
                            command.Parameters.AddWithValue(sqlParmName, parm2.Value.Key);   
                        else
                        {
                            command.Parameters.AddWithValue(sqlParmName, DBNull.Value);   
                        }
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.UniqueIdentifier);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<bool>)
                {
                    ProcedureParameter<bool> parm2 = (ProcedureParameter<bool>)parm;
                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Bit);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<string>)
                {
                    ProcedureParameter<string> parm2 = (ProcedureParameter<string>)parm;

                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.NVarChar, 1024);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<ServerEnum>)
                {
                    ProcedureParameter<ServerEnum> parm2 = (ProcedureParameter<ServerEnum>)parm;
                    if (parm2.Value == null)
                        command.Parameters.AddWithValue(sqlParmName, null);
                    else
                    {
                        if (parm2.Output)												
                            throw new PersistenceException("Unsupported output parameter type: ServerEnum",null);

                        command.Parameters.AddWithValue(sqlParmName, parm2.Value.Enum);
                    }
                }
                else if (parm is ProcedureParameter<Decimal>)
                {
                    ProcedureParameter<Decimal> parm2 = (ProcedureParameter<Decimal>)parm;

                    if (!parm2.Output)
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Decimal);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter<XmlDocument>)
                {
                    ProcedureParameter<XmlDocument> parm2 = (ProcedureParameter<XmlDocument>)parm;
                    if (parm2.Value == null)
                        command.Parameters.AddWithValue(sqlParmName, null);
                    else
                    {
                        if (parm2.Output)
                            throw new PersistenceException("Unsupported output parameter type: XmlDocument", null);

                        if (parm2.Value.DocumentElement!=null)
                        {
                            XmlNodeReader reader = new XmlNodeReader(parm2.Value.DocumentElement);
                            SqlXml xml = new SqlXml(reader);
                            command.Parameters.AddWithValue(sqlParmName, xml);
                        }
                        else
                        {
                            SqlXml xml = new SqlXml();
                            command.Parameters.AddWithValue(sqlParmName, xml);
                        }
                        
                    }
                }
                else
                    throw new PersistenceException("Unknown procedure parameter type: " + parm.GetType(), null);

            }

        }
Example #4
0
        protected static void GetOutputParameters(SqlCommand command, ProcedureParameters parms)
        {
            foreach (SearchCriteria parm in parms.EnumerateSubCriteria())
            {
                String sqlParmName = "@" + parm.GetKey();

                if (parm is ProcedureParameter<DateTime?>)
                {
                    ProcedureParameter<DateTime?> parm2 = (ProcedureParameter<DateTime?>)parm;
                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (DateTime?)sqlParm.Value;
                }
                else if (parm is ProcedureParameter<DateTime>)
                {
                    ProcedureParameter<DateTime> parm2 = (ProcedureParameter<DateTime>)parm;
                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (DateTime)sqlParm.Value;
                }
                else if (parm is ProcedureParameter<int>)
                {
                    ProcedureParameter<int> parm2 = (ProcedureParameter<int>)parm;

                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    //object o = command.Connection.Get
                    if (sqlParm.Value != null)
                        parm2.Value = (int)sqlParm.Value;
                }
                else if (parm is ProcedureParameter<ServerEntityKey>)
                {
                    sqlParmName = sqlParmName.Replace("Key", "GUID");
                    ProcedureParameter<ServerEntityKey> parm2 = (ProcedureParameter<ServerEntityKey>)parm;

                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = new ServerEntityKey("", sqlParm.Value);
                }
                else if (parm is ProcedureParameter<bool>)
                {
                    ProcedureParameter<bool> parm2 = (ProcedureParameter<bool>)parm;
                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (bool)sqlParm.Value;
                }
                else if (parm is ProcedureParameter<Decimal>)
                {
                    ProcedureParameter<Decimal> parm2 = (ProcedureParameter<Decimal>)parm;

                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (Decimal)sqlParm.Value;
                }
                else if (parm is ProcedureParameter<string>)
                {
                    ProcedureParameter<string> parm2 = (ProcedureParameter<string>)parm;

                    if (!parm2.Output)
                        continue;
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    if (sqlParm.Value != DBNull.Value)
                        parm2.Value = (string)sqlParm.Value;
                }
            }
        }
Example #5
0
        protected static void SetParameters(SqlCommand command, ProcedureParameters parms)
        {
            foreach (SearchCriteria parm in parms.EnumerateSubCriteria())
            {
                String sqlParmName = "@" + parm.GetKey();

                if (parm is ProcedureParameter <DateTime?> )
                {
                    ProcedureParameter <DateTime?> parm2 = (ProcedureParameter <DateTime?>)parm;
                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.DateTime);
                        sqlParm.IsNullable = true;
                        sqlParm.Direction  = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <DateTime> )
                {
                    ProcedureParameter <DateTime> parm2 = (ProcedureParameter <DateTime>)parm;
                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.DateTime);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <int> )
                {
                    ProcedureParameter <int> parm2 = (ProcedureParameter <int>)parm;

                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Int);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <ServerEntityKey> )
                {
                    sqlParmName = sqlParmName.Replace("Key", "GUID");
                    ProcedureParameter <ServerEntityKey> parm2 = (ProcedureParameter <ServerEntityKey>)parm;

                    if (!parm2.Output)
                    {
                        if (parm2.Value != null)
                        {
                            command.Parameters.AddWithValue(sqlParmName, parm2.Value.Key);
                        }
                        else
                        {
                            command.Parameters.AddWithValue(sqlParmName, DBNull.Value);
                        }
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.UniqueIdentifier);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <bool> )
                {
                    ProcedureParameter <bool> parm2 = (ProcedureParameter <bool>)parm;
                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Bit);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <string> )
                {
                    ProcedureParameter <string> parm2 = (ProcedureParameter <string>)parm;

                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.NVarChar, 1024);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <ServerEnum> )
                {
                    ProcedureParameter <ServerEnum> parm2 = (ProcedureParameter <ServerEnum>)parm;
                    if (parm2.Value == null)
                    {
                        command.Parameters.AddWithValue(sqlParmName, null);
                    }
                    else
                    {
                        if (parm2.Output)
                        {
                            throw new PersistenceException("Unsupported output parameter type: ServerEnum", null);
                        }

                        command.Parameters.AddWithValue(sqlParmName, parm2.Value.Enum);
                    }
                }
                else if (parm is ProcedureParameter <Decimal> )
                {
                    ProcedureParameter <Decimal> parm2 = (ProcedureParameter <Decimal>)parm;

                    if (!parm2.Output)
                    {
                        command.Parameters.AddWithValue(sqlParmName, parm2.Value);
                    }
                    else
                    {
                        SqlParameter sqlParm = command.Parameters.Add(sqlParmName, SqlDbType.Decimal);
                        sqlParm.Direction = ParameterDirection.Output;
                    }
                }
                else if (parm is ProcedureParameter <XmlDocument> )
                {
                    ProcedureParameter <XmlDocument> parm2 = (ProcedureParameter <XmlDocument>)parm;
                    if (parm2.Value == null)
                    {
                        command.Parameters.AddWithValue(sqlParmName, null);
                    }
                    else
                    {
                        if (parm2.Output)
                        {
                            throw new PersistenceException("Unsupported output parameter type: XmlDocument", null);
                        }

                        if (parm2.Value.DocumentElement != null)
                        {
                            XmlNodeReader reader = new XmlNodeReader(parm2.Value.DocumentElement);
                            SqlXml        xml    = new SqlXml(reader);
                            command.Parameters.AddWithValue(sqlParmName, xml);
                        }
                        else
                        {
                            SqlXml xml = new SqlXml();
                            command.Parameters.AddWithValue(sqlParmName, xml);
                        }
                    }
                }
                else
                {
                    throw new PersistenceException("Unknown procedure parameter type: " + parm.GetType(), null);
                }
            }
        }
Example #6
0
        protected static void GetOutputParameters(SqlCommand command, ProcedureParameters parms)
        {
            foreach (SearchCriteria parm in parms.EnumerateSubCriteria())
            {
                String sqlParmName = "@" + parm.GetKey();

                if (parm is ProcedureParameter <DateTime?> )
                {
                    ProcedureParameter <DateTime?> parm2 = (ProcedureParameter <DateTime?>)parm;
                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (DateTime?)sqlParm.Value;
                }
                else if (parm is ProcedureParameter <DateTime> )
                {
                    ProcedureParameter <DateTime> parm2 = (ProcedureParameter <DateTime>)parm;
                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (DateTime)sqlParm.Value;
                }
                else if (parm is ProcedureParameter <int> )
                {
                    ProcedureParameter <int> parm2 = (ProcedureParameter <int>)parm;

                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    //object o = command.Connection.Get
                    if (sqlParm.Value != null)
                    {
                        parm2.Value = (int)sqlParm.Value;
                    }
                }
                else if (parm is ProcedureParameter <ServerEntityKey> )
                {
                    sqlParmName = sqlParmName.Replace("Key", "GUID");
                    ProcedureParameter <ServerEntityKey> parm2 = (ProcedureParameter <ServerEntityKey>)parm;

                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = new ServerEntityKey("", sqlParm.Value);
                }
                else if (parm is ProcedureParameter <bool> )
                {
                    ProcedureParameter <bool> parm2 = (ProcedureParameter <bool>)parm;
                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (bool)sqlParm.Value;
                }
                else if (parm is ProcedureParameter <Decimal> )
                {
                    ProcedureParameter <Decimal> parm2 = (ProcedureParameter <Decimal>)parm;

                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    parm2.Value = (Decimal)sqlParm.Value;
                }
                else if (parm is ProcedureParameter <string> )
                {
                    ProcedureParameter <string> parm2 = (ProcedureParameter <string>)parm;

                    if (!parm2.Output)
                    {
                        continue;
                    }
                    SqlParameter sqlParm = command.Parameters[sqlParmName];
                    if (sqlParm.Value != DBNull.Value)
                    {
                        parm2.Value = (string)sqlParm.Value;
                    }
                }
            }
        }
        /// <summary>
        ///     Generates this instance.
        /// </summary>
        /// <returns></returns>
        /// <exception cref="System.MissingMemberException">PropertyNotFound: " + ci.ColumnName</exception>
        /// <exception cref="System.NotImplementedException"></exception>
        public string Generate()
        {
            Padding = PaddingForMethodDeclaration;
            if (Model.Comment != null)
            {
                WriteLine("/// <summary>");
                WriteLine("///" + PaddingForComment + Model.Comment);
                WriteLine("/// </summary>");
            }

            WriteLine("public GenericResponse<{1}> {0}({2})", Model.DotNetMethodName, GenericResponseMethodReturnType, GetMethodParametersPart());

            WriteLine("{");

            Padding++;

            if (Model.ExecutionType == ExecutionType.ExecuteReader)
            {
                WriteLine("var returnObject = CreateResponse<{0}>();", GenericResponseMethodReturnType);
                WriteLine();
            }

            if (Model.ExecutionType == ExecutionType.ExecuteReaderForOneColumn)
            {
                WriteLine("var returnObject = CreateResponse<{0}>();", GenericResponseMethodReturnType);
                WriteLine();
            }

            WriteLine("var command = DBLayer.GetDBCommand(Databases.{0}, \"{1}\");", Model.DatabaseEnumName, Model.ProcedureFullName);
            WriteLine();

            if (ProcedureParameters.Any())
            {
                WriteLine("// Parameters");

                foreach (var procedureParameter in ProcedureParameters)
                {
                    var sqlDatabaseTypeName = SqlDataType.GetSqlDbType(procedureParameter.SqlDataType);

                    var parameterValue = procedureParameter.Name.AsMethodParameter();
                    if (ParameterIsContract)
                    {
                        parameterValue = "contract." + procedureParameter.Name;

                        if (procedureParameter.SqlDataTypeIsVarChar() && Model.ReturnValueType.PropertyTypeIsGuid(procedureParameter.Name))
                        {
                            parameterValue = $"contract.{procedureParameter.Name} == Guid.Empty ? null : contract.{procedureParameter.Name}.ToString()";
                        }
                    }

                    if (procedureParameter.Name == Names.UpdateUserName)
                    {
                        parameterValue = Names.UpdateUserNameValue;
                    }

                    if (procedureParameter.Name == Names.UpdateHostName)
                    {
                        parameterValue = Names.UpdateHostNameValue;
                    }

                    if (procedureParameter.Name == Names.UpdateHostIP)
                    {
                        parameterValue = Names.UpdateHostIPValue;
                    }

                    if (procedureParameter.Name == Names.UpdateSystemDate)
                    {
                        parameterValue = Names.UpdateSystemDateValue;
                    }

                    if (procedureParameter.Name == Names.UserName)
                    {
                        parameterValue = Names.UserNameValue;
                    }

                    if (procedureParameter.Name == Names.HostName)
                    {
                        parameterValue = Names.HostNameValue;
                    }

                    if (procedureParameter.Name == Names.HostIP)
                    {
                        parameterValue = Names.HostIPValue;
                    }

                    if (procedureParameter.Name == Names.SystemDate)
                    {
                        parameterValue = Names.SystemDateValue;
                    }

                    if (procedureParameter.Name == Names.ChannelId)
                    {
                        parameterValue = Names.ChannelIdValue;
                    }

                    WriteLine("DBLayer.AddInParameter(command, \"{0}\", SqlDbType.{1}, {2});",
                              procedureParameter.Name, sqlDatabaseTypeName, parameterValue);
                }

                WriteLine();
            }

            if (Model.ExecutionType == ExecutionType.ExecuteScalar)
            {
                WriteLine("return DBLayer.ExecuteScalar<{0}>(command);", GenericResponseMethodReturnType);
            }
            else if (Model.ExecutionType == ExecutionType.ExecuteNonQuery)
            {
                WriteLine("return DBLayer.ExecuteNonQuery(command);");

                //WriteLine("#region returnObject.Value = DBLayer.ExecuteNonQuery(command);");
                //WriteLine("var sp = DBLayer.ExecuteNonQuery(command);");
                //WriteLine("if (!sp.Success)");
                //WriteLine("{");
                //Padding++;
                //WriteLine("return returnObject.Add(sp);");
                //Padding--;
                //WriteLine("}");
                //WriteLine();
                //WriteLine("returnObject.Value = sp.Value;");
                //WriteLine("#endregion");
                //WriteLine();
                //WriteLine("return returnObject;");
            }
            else if (Model.ExecutionType == ExecutionType.ExecuteReader)
            {
                WriteLine("var sp = DBLayer.ExecuteReader(command);");
                WriteLine("if (!sp.Success)");
                WriteLine("{");
                Padding++;
                WriteLine("return returnObject.Add(sp);");
                Padding--;
                WriteLine("}");
                WriteLine();
                WriteLine("var reader = sp.Value;");
                WriteLine();

                if (Model.ReturnOnlyOneRecord)
                {
                    WriteLine("{0} dataContract = null;", GenericResponseMethodReturnType);
                }
                else
                {
                    WriteLine("var listOfDataContract = new {0}();", GenericResponseMethodReturnType);
                }



                WriteLine("while (reader.Read())");
                WriteLine("{");
                Padding++;

                if (!Model.ReturnOnlyOneRecord)
                {
                    Write("var ");
                }

                WriteLine("dataContract = new {0}();", Model.GenericResponseMethodReturnType);

                var columns = ProcedureInfoReturnColumns;

                foreach (var ci in columns)
                {
                    var readerMethod = SqlReaderMethods.GetStringValue.ToString();

                    var prop = Model.ReturnValueType.Properties.FirstOrDefault(p => p.Name == ci.ColumnName);
                    if (prop != null)
                    {
                        readerMethod = SqlDataType.GetSqlReaderMethod(prop.PropertyType).ToString();
                    }

                    if (readerMethod == SqlReaderMethods.GetGUIDValue.ToString() && Model.ReturnValueType.PropertyTypeIsGuid(ci.ColumnName))
                    {
                        WriteLine("dataContract." + ci.ColumnName + " = string.IsNullOrWhiteSpace(reader[" + '"' + ci.ColumnName + '"' + "] +" + '"' + '"' + ") ? Guid.Empty : Guid.Parse(reader[" + '"' + ci.ColumnName + '"' + "].ToString());");
                        continue;
                    }

                    WriteLine(@"dataContract.{0} = SQLDBHelper.{1}(reader[{2}]);", ci.ColumnName, readerMethod, '"' + ci.ColumnName + '"');
                }

                if (Model.ReturnOnlyOneRecord)
                {
                    WriteLine("break;");
                }
                else
                {
                    WriteLine("listOfDataContract.Add(dataContract);");
                }

                Padding--;
                WriteLine("}");

                WriteLine("reader.Close();");
                WriteLine();

                if (Model.ReturnOnlyOneRecord)
                {
                    WriteLine("returnObject.Value = dataContract;");
                }
                else
                {
                    WriteLine("returnObject.Value = listOfDataContract;");
                }

                WriteLine();

                WriteLine("return returnObject;");
            }

            else if (Model.ExecutionType == ExecutionType.ExecuteReaderForOneColumn)
            {
                WriteLine("var sp = DBLayer.ExecuteReader(command);");
                WriteLine("if (!sp.Success)");
                WriteLine("{");
                Padding++;
                WriteLine("return returnObject.Add(sp);");
                Padding--;
                WriteLine("}");
                WriteLine();

                WriteLine("var list = new {0}();", GenericResponseMethodReturnType.RemoveFromStart("I"));
                WriteLine();
                WriteLine("var reader = sp.Value;");
                WriteLine("while (reader.Read())");
                WriteLine("{");
                Padding++;

                var ci = ProcedureInfoReturnColumns.First();

                var readerMethod = SqlDataType.GetSqlReaderMethod(ci.DataType).ToString();

                WriteLine(@"list.Add(SQLDBHelper.{0}(reader[{1}]));", readerMethod, '"' + ci.ColumnName + '"');

                Padding--;
                WriteLine("}");

                WriteLine("reader.Close();");
                WriteLine();

                WriteLine("returnObject.Value = list;");
                WriteLine();

                WriteLine("return returnObject;");
            }
            else
            {
                throw new NotImplementedException(Model.ExecutionType.ToString());
            }

            Padding--;
            WriteLine("}");

            return(GeneratedString);
        }
Example #8
0
        private void Save()
        {
            EditingInfo.ConnectionType   = connectionViewModel.ConnectionType;
            EditingInfo.ConnectionString = connectionViewModel.ConnectionString;
            EditingInfo.StoredProcedure  = StoredProcedure;
            if (ShouldUpdateParameters)
            {
                EditingInfo.ProcedureParameters = new DatabaseModel.ProcedureParameters(ProcedureParameters.Select(p => p.ProcedureParameter));
            }
            if (ShouldUpdateResultSets)
            {
                EditingInfo.ResultSets = ResultSets;
            }

            DialogResult = true;
        }
Example #9
0
        protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
        {
            if (ProcedureType == ProcedureProcedureType.Legacy)
            {
                throw new NotSupportedException("Legacy type stored procedures are not supported.");
            }

            var command = SqlHelper.IsValidExternalEngine(this) ? new Command() : new PSqlCommand();

            command.Append($"CREATE OR ALTER PROCEDURE {ProcedureName.AsSqlIndentifier()}");
            if (ProcedureInputs > 0)
            {
                var inputs = ProcedureParameters
                             .Where(o => o.ParameterType == ProcedureParameterType.In)
                             .OrderBy(o => o.ParameterNumber);
                command.Append(" (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(inputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
            }
            command.AppendLine();
            if (ProcedureOutputs > 0)
            {
                var outputs = ProcedureParameters
                              .Where(o => o.ParameterType == ProcedureParameterType.Out)
                              .OrderBy(o => o.ParameterNumber);
                command.Append("RETURNS (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(outputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
                command.AppendLine();
            }
            if (SqlHelper.IsValidExternalEngine(this))
            {
                if (context.EmptyBodiesEnabled)
                {
                    yield break;
                }
                command.Append($"EXTERNAL NAME '{SqlHelper.DoubleSingleQuotes(EntryPoint)}'");
                command.AppendLine();
                command.Append($"ENGINE {EngineName.AsSqlIndentifier()}");
            }
            else
            {
                command.Append("AS");
                command.AppendLine();
                if (context.EmptyBodiesEnabled)
                {
                    command.Append("BEGIN");
                    command.AppendLine();
                    if (ProcedureType == ProcedureProcedureType.Selectable)
                    {
                        command.Append($"  SUSPEND{SqlHelper.Terminator}");
                        command.AppendLine();
                    }
                    command.Append("END");
                }
                else
                {
                    command.Append(ProcedureSource);
                }
            }
            yield return(command);
        }
 public override void ExplicitVisit(ProcedureParameter node)
 {
     ProcedureParameters.Add(node);
 }
Example #11
0
        public string Generate()
        {
            WriteLine("USE {0}", NameOfSqlProceduresWillBeRunCatalogName);
            WriteLine("GO");
            WriteLine("");

            WriteLine("IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[{0}].[{1}]') AND type in (N'P', N'PC'))",
                      DatabaseTargetSchemaForProcedureNames, NameOfSqlProcedureUpdate);

            Padding++;

            WriteLine("DROP PROCEDURE {0}", DatabaseTargetSchemaForProcedureNames + "." + NameOfSqlProcedureUpdate);

            Padding--;

            WriteLine("GO");
            WriteLine();

            WriteSqlComment(new List <string>
            {
                Comment
            });

            WriteLine("CREATE PROCEDURE " + DatabaseTargetSchemaForProcedureNames + "." + NameOfSqlProcedureUpdate);
            WriteLine("(");

            Padding++;

            var lastColumn = ProcedureParameters.Last();

            foreach (var c in ProcedureParameters)
            {
                var format = "@{0} {1}";
                if (c.IsNullable)
                {
                    format += " = NULL";
                }

                if (c != lastColumn)
                {
                    format += ",";
                }

                var dataType = c.DataType;
                if (dataType == SqlDataType.VarBinary)
                {
                    dataType = dataType + "(MAX)";
                }

                WriteLine(format, c.ColumnName, dataType);
            }

            Padding--;

            WriteLine(")");
            WriteLine("AS");
            if (CanGenerateSetNoCountOn)
            {
                WriteLine("SET NOCOUNT ON");
            }

            WriteLine("BEGIN");
            WriteLine("");

            Padding++;
            WriteLine("UPDATE T SET");

            Padding++;
            lastColumn = GetUpdateColumns().Last();
            foreach (var c in GetUpdateColumns())
            {
                var format = "T.{0} = @{0}";

                if (c != lastColumn)
                {
                    format += ",";
                }

                WriteLine(format, c.ColumnName.NormalizeColumnNameForReversedKeywords());
            }

            Padding--;

            WriteLine();
            Padding++;
            var whereParameters = string.Join(" AND ", from c in WhereColumns select "T." + c.ColumnName + " = @" + c.ColumnName);

            WriteLine("FROM {0} AS T WHERE {1}", Context.Config.TablePathForSqlScript, whereParameters);
            Padding--;

            WriteLine("");
            Padding--;
            WriteLine("END");

            return(GeneratedString);
        }