Use your own Exceptions. Create appropriate exception classes inheriting from System.Exception or System.ApplicationException or other, and add your ErrorCode property. Thrown the exception when appropriate in the Business Layer. In the Presentation Layer, you need some try...catch blocks, and when you catch one of your specific exceptions, you can access its error code and get the wording for it.
Note that you can have multiple catch blocks after a try, the most specific exception has to come first:
try
{
...some code
}
catch (MyException mex)
{
string msg = GetMessage(mex.ErrorCode);
...
}
catch (System.Exception ex)
{
...
}