My guess is that you aren't doing the SELECT @@identity from the same context (database connection, aka spid), so it can't retrieve the identity value for you. Can you post your code from the INSERT to the SELECT of the identity for us?
You'll need to tidy this up a bit, but I'd suggest something like:
id_ = ExecuteScalar("INSERT INTO user (num) value (0)
SELECT @@IDENTITY as ident FROM user")
This makes the INSERT and the SELECT operate in the same SQL context, so it is possible to retrieve the correct identity value.
The problem comes from the difference in how Jet (the database engine that lies underneath MS-Access) and MS-SQL look at connectivity. Jet is single user, MS-SQL is multi-user. There's a whole different set of problems to solve.