Duplex client has its own listener loop, so special care on reply is needed.
[mono.git] / mcs / class / System.Data / System.Data.SqlClient / SqlConnection.cs
index 84c6626c9f9bc8f7d0104fd8de9936ffc38564be..ef5a4fc18b398c1719c69e779ff70f75779e9838 100644 (file)
@@ -45,7 +45,9 @@ using System.Collections.Specialized;
 using System.ComponentModel;
 using System.Data;
 using System.Data.Common;
+#if !MOBILE
 using System.EnterpriseServices;
+#endif
 using System.Globalization;
 using System.Net;
 using System.Net.Sockets;
@@ -302,6 +304,15 @@ namespace System.Data.SqlClient
 
                private void ErrorHandler (object sender, TdsInternalErrorMessageEventArgs e)
                {
+                       try {
+                               if (!tds.IsConnected)
+                                       Close ();
+                       } catch {
+                               try {
+                                       Close ();
+                               } catch {
+                               }
+                       }
                        throw new SqlException (e.Class, e.LineNumber, e.Message, e.Number, e.Procedure, e.Server, "Mono SqlClient Data Provider", e.State);
                }
 
@@ -471,11 +482,13 @@ namespace System.Data.SqlClient
                        }
                }
 
+#if !MOBILE
                [MonoTODO ("Not sure what this means at present.")]
                public void EnlistDistributedTransaction (ITransaction transaction)
                {
                        throw new NotImplementedException ();
                }
+#endif
 
                object ICloneable.Clone ()
                {
@@ -526,7 +539,7 @@ namespace System.Data.SqlClient
                                if (!pooling) {
                                        if(!ParseDataSource (dataSource, out port, out serverName))
                                                throw new SqlException(20, 0, "SQL Server does not exist or access denied.",  17, "ConnectionOpen (Connect()).", dataSource, parms.ApplicationName, 0);
-                                       tds = new Tds70 (serverName, port, PacketSize, ConnectionTimeout);
+                                       tds = new Tds80 (serverName, port, PacketSize, ConnectionTimeout);
                                        tds.Pooling = false;
                                }
                                else {