It even works in one line: udp.print("#01M"+String(dB)+">");
:-/
Have you seen the many, many comments about using the String class? If you haven't, [url=http://here's a summary of some reasons. Be sure to read The Evils of Arduino Strings. So... Don't use String™... unless you like weird behaviour, random crashes and hangs. Using String is even worse when combined with larger libraries, like Ethernet.
You should also use the F macro to prevent double-quoted strings from being copied to RAM. The F macro allows them to be used directly from FLASH (e.g., for printing or concatenating in Reply#4).
Lest you doubt, here are 4 test programs for you to try:
#define udp Serial
int db = 1430;
void setup()
{
udp.begin( 9600 );
udp.print( F("#01M") );
udp.print( db );
udp.print( '>' );
}
void loop() {}
#define udp Serial
uint8_t UDPBuffer[40];
int db = 1430;
void setup()
{
char *ptr = (char *) &UDPBuffer[0];
strcpy_P( ptr, PSTR("#01M") ); // copy in constant part of string
ptr = &ptr[ strlen(ptr) ]; // advance pointer to end of copied string
itoa( db, ptr, 10 ); // assumes db is an int
ptr = &ptr[ strlen(ptr) ]; // advance pointer past db digits
*ptr++ = '>'; // append one char (writes over terminating NUL)
*ptr++ = '\0'; // append NUL terminator
udp.begin( 9600 );
udp.write( UDPBuffer, strlen((char *) UDPBuffer) );
}
void loop() {}
#define udp Serial
int db = 1430;
void setup()
{
udp.begin( 9600 );
udp.print("#01M"+String(db)+">");
}
void loop() {}
And if you really want to put it all on one line, you can use the Streaming library. This essentially uses the << operator to "Stream" the pieces out.
#include <Streaming.h>
#define udp Serial
int db = 1430;
void setup()
{
udp.begin( 9600 );
udp << F("#01M") << db << '>';
}
void loop() {}
Now the juicy part... program sizes:
| ** Method ** | **| Program ** | **| RAM ** |
| - | - | - |
| Print pieces | | 2168 | | 184 |
| RAM buffer | | 1908 | | 224 |
| String | | 3900 | | 269 (222 + 10 + 37 heap) |
| Streaming | | 2178 | | 184 |
Your choice, of course. 
Cheers,
/dev