/// <summary> /// Create and add a StoredProcedure instance to this Database. /// <para>The name parameter must be a valid one-part or two-part T-SQL identifier. Square brackets around the name parts are optional.</para> /// <para>E.g. "my_stored_proc", "[my_stored_proc]", "my_schema.my_stored_proc", and "[my_schema].[my_stored_proc]" are all valid name identifiers.</para> /// <para>Names with more than two parts, or missing parts, are considered errors.</para> /// </summary> public StoredProcedure AddStoredProcedure(String name, Int32 versionNumber, params SqlParameter[] sqlParameters) { name.Name("name").NotNullEmptyOrOnlyWhitespace(); versionNumber.Name("versionNumber").GreaterThan(0); name = IdentifierHelper.GetStrippedSqlIdentifier(name); var nameParts = name.Split(".".ToCharArray(), StringSplitOptions.None); /* It's an error if any of the name parts are empty, and this method only accepts one-part ([object name]) or two-part ([schema name].[object name]) T-SQL identifiers. */ if (nameParts.Any(s => s.IsEmpty()) || (nameParts.Length > 2)) throw new ArgumentExceptionFmt(Properties.Resources.InvalidStoredProcedureName, name); /* At this point, all of the name parts have been validated for correct form. */ if (nameParts.Length == 1) { return this.Schemas.GetDefaultSchema().AddStoredProcedure(name, versionNumber, sqlParameters); } else { var schemaName = nameParts[0]; var schema = this.Schemas.GetByName(schemaName); if (schema == null) throw new ExceptionFmt(Properties.Resources.SchemaNameNotFound, schemaName); var storedProcedureName = nameParts[1]; return schema.AddStoredProcedure(storedProcedureName, versionNumber, sqlParameters); } }
public StoredProcedure AddStoredProcedure(String name, Int32 versionNumber, params SqlParameter[] sqlParameters) { name.Name("name").NotNullEmptyOrOnlyWhitespace(); versionNumber.Name("versionNumber").GreaterThan(0); name = IdentifierHelper.GetBracketedSqlIdentifier(name); if (name.Contains(".")) throw new ArgumentExceptionFmt(Properties.Resources.InvalidStoredProcedureNameForSchema, name); if (this.StoredProcedures.GetByName(name, versionNumber) == null) { var sp = new StoredProcedure(this, name, versionNumber, sqlParameters); this.StoredProcedures.Add(sp); return sp; } else { throw new ExceptionFmt(Properties.Resources.StoredProcedureAlreadyExists, name, versionNumber); } }