Here's something that might help.
1) Make sure you're processing all the messages from Sybase
I've worked at many places where the first message was a warning which they printed and then neglected to print the actual errors. In this case you might not get an exception.
We also had to add "IgnoreErrorsIfRS Pening" to process all the remaining results correctly - but that meant exceptions didn't work properly. So in the end we handled all exceptions in the Error/message handler and threw errors back up the stack. Not sure if this is the prefered way of doing it - but it was the only way we could get all messages processed correctly. I'd love to know if you have more success.
2) Truncation error occured in Severity 10 - which isnt' really an error at all - its "Status Information". You could argue it should be - but there are cases when you want it to be severe and cases when you don't
I recommend not using @@error as a check - write a decent message/error handler - include deadlock handling etc.. It took us a month of trial and error to get it right - but once it works you're sorted.
BTW, Are you using Connection Pool ? If so you'll need a decent handler to clean up for the next connection pool as its not automatic.