Don't call GetSchemaTable() from the constructor, just fetch the column
authorVeerapuram Varadhan <v.varadhan@gmail.com>
Tue, 26 Aug 2008 19:39:27 +0000 (19:39 -0000)
committerVeerapuram Varadhan <v.varadhan@gmail.com>
Tue, 26 Aug 2008 19:39:27 +0000 (19:39 -0000)
information.

Patch provided by Ernesto.

svn path=/trunk/mcs/; revision=111649

mcs/class/System.Data/System.Data.Odbc/ChangeLog
mcs/class/System.Data/System.Data.Odbc/OdbcDataReader.cs

index 04dc0638b0902d15d569b1d00806d27cd1257da0..c43bc99df75c56c95e58a3215792b2cf39b59040 100644 (file)
@@ -1,3 +1,10 @@
+2008-08-26  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       Patch provided by Ernesto <equistango@gmail.com>
+       * OdbcDataReader.cs: Don't call GetSchemaTable in the constructor
+       instead just get column information.  Enhances performance of
+       DataReader.
+       
 2008-08-26  Veerapuram Varadhan  <vvaradhan@novell.com>
 
        Patch provided by Ernesto <equistango@gmail.com>
index 8358c5f19c620a70b87097e3119c7d949e1af7d4..e50f482629177ab944fdfd55cf669ec759fc1910 100644 (file)
@@ -75,7 +75,7 @@ namespace System.Data.Odbc
                        short colcount = 0;
                        libodbc.SQLNumResultCols (hstmt, ref colcount);
                        cols = new OdbcColumn [colcount];
-                       GetSchemaTable ();
+                       GetColumns ();
                }
 
                internal OdbcDataReader (OdbcCommand command, CommandBehavior behavior,
@@ -225,6 +225,13 @@ namespace System.Data.Odbc
                        }
                        return cols [ordinal];
                }
+               
+               // Load all column descriptions
+               private void GetColumns ()
+               {
+                       for(int i = 0; i < cols.Length; i++)
+                               GetColumn (i);
+               }
 
                public
 #if NET_2_0
@@ -913,7 +920,7 @@ namespace System.Data.Odbc
                                libodbc.SQLNumResultCols (hstmt, ref colcount);
                                cols = new OdbcColumn [colcount];
                                _dataTableSchema = null; // force fresh creation
-                               GetSchemaTable ();
+                               GetColumns ();
                        }
                        return (ret == OdbcReturn.Success);
                }