Hi Casey,
>> GUID's would work, but they come with a lot of overhead and performance impacts.
Interesting. I use GUIDS a fair bit here, and I'm not seeing the performance or overhead impacts. Not that I've set up too many formal tests mind. Perhaps, if you're concerned about this, you might want to do some tests to quantify these impacts?
>> What are the downsides to this approach?
Ulongs are a lot slower than Longs (computationally speaking) and of course Max out at 4 billion numbers (or 2 billion if you use a Long).
Also your system doesn't "scale" up well. For example, if the system became so busy (or uptime so important) that you decided to add another webserver (talking to the same database) then you'd be in a right pickle.
Also users can "infer" information about your database, by guessing id numbers. NT5 makes this much less of an issue than NT4, but it never hurts to keep security as tight as possible.
For Guids, I use a really simple function to populate a 16 character string. It can be as simple as
loop x = 1 to 16
guid
end
If you're bad at math and feel that there's too much chance of a collision then it's not hard to extend the code to include digits as well.
Cheers
Bruce