Index: django/db/backends/ado_mssql/base.py
===================================================================
--- django/db/backends/ado_mssql/base.py	(revision 3354)
+++ django/db/backends/ado_mssql/base.py	(working copy)
@@ -70,7 +70,7 @@
             # TODO: Handle DATABASE_PORT.
             conn_string = "PROVIDER=SQLOLEDB;DATA SOURCE=%s;UID=%s;PWD=%s;DATABASE=%s" % (settings.DATABASE_HOST, settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
             self.connection = Database.connect(conn_string)
-        cursor = self.connection.cursor()
+        cursor = Cursor(self.connection)
         if settings.DEBUG:
             return util.CursorDebugWrapper(cursor, self)
         return cursor
@@ -117,10 +117,13 @@
 
 def get_limit_offset_sql(limit, offset=None):
     # TODO: This is a guess. Make sure this is correct.
-    sql = "LIMIT %s" % limit
-    if offset and offset != 0:
-        sql += " OFFSET %s" % offset
-    return sql
+    # should be "SELECT TOP %s" % limit
+    # not LIMIT at the end
+    return ""
+    #sql = "LIMIT %s" % limit
+    #if offset and offset != 0:
+    #    sql += " OFFSET %s" % offset
+    #return sql
 
 def get_random_function_sql():
     return "RAND()"
Index: django/db/backends/ado_mssql/introspection.py
===================================================================
--- django/db/backends/ado_mssql/introspection.py	(revision 3354)
+++ django/db/backends/ado_mssql/introspection.py	(working copy)
@@ -1,5 +1,6 @@
 def get_table_list(cursor):
-    raise NotImplementedError
+    cursor.execute('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES')
+    return [row[0] for row in cursor.fetchall()]
 
 def get_table_description(cursor, table_name):
     raise NotImplementedError
Index: django/db/models/base.py
===================================================================
--- django/db/models/base.py	(revision 3354)
+++ django/db/models/base.py	(working copy)
@@ -172,7 +172,7 @@
         record_exists = True
         if pk_set:
             # Determine whether a record with the primary key already exists.
-            cursor.execute("SELECT 1 FROM %s WHERE %s=%%s LIMIT 1" % \
+            cursor.execute("SELECT 1 FROM %s WHERE %s=%%s" % \
                 (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), [pk_val])
             # If it does already exist, do an UPDATE.
             if cursor.fetchone():
Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 3354)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -478,7 +478,7 @@
         if value is not None:
             # MySQL will throw a warning if microseconds are given, because it
             # doesn't support microseconds.
-            if settings.DATABASE_ENGINE == 'mysql' and hasattr(value, 'microsecond'):
+            if settings.DATABASE_ENGINE == 'mysql' or settings.DATABASE_ENGINE == 'ado_mssql' and hasattr(value, 'microsecond'):
                 value = value.replace(microsecond=0)
             value = str(value)
         return Field.get_db_prep_save(self, value)
