List:Commits« Previous MessageNext Message »
From:rburnett Date:June 14 2007 4:36pm
Subject:Connector/NET commit: r761 - in trunk: . VisualStudio VisualStudio/Enumerators
View as plain text  
Modified:
   trunk/CHANGES
   trunk/VisualStudio/DataConnectionWrapper.cs
   trunk/VisualStudio/Enumerators/StoredProcedureColumnEnumerator.cs
Log:
Bug #29098  	TableAdapter Wisard closed wher adding one new (stored procedure)

This bug was caused by using a procedure that requires at least one parameter.  We support this by using default values (either 0 or "") for the parameter.  

Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES	2007-06-14 16:33:34 UTC (rev 760)
+++ trunk/CHANGES	2007-06-14 16:36:44 UTC (rev 761)
@@ -1,3 +1,7 @@
+Version 5.1.3 - 
+  - Fixed problem with using a stored procedure that takes a parameter as a select routine
+    for a TableAdapter wizard. (Bug #29098)
+
 Version 5.1.2 - 6/12/2007
   - Fixed integration with the Website Administration Tool.  Before this fix, the test link
     was visible but did not work and  user management did not work.

Modified: trunk/VisualStudio/DataConnectionWrapper.cs
===================================================================
--- trunk/VisualStudio/DataConnectionWrapper.cs	2007-06-14 16:33:34 UTC (rev 760)
+++ trunk/VisualStudio/DataConnectionWrapper.cs	2007-06-14 16:36:44 UTC (rev 761)
@@ -226,6 +226,18 @@
         }
         #endregion
 
+        public DbConnection GetOpenConnection()
+        {
+            DbConnection c = GetConnection();
+            EnsureConnectionIsOpen();
+            return c;
+        }
+
+        public void ReleaseConnection()
+        {
+            Connection.UnlockProviderObject();
+        }
+
         #region Query execution methods
 
         /// <summary>
@@ -1024,7 +1036,7 @@
         /// </summary>
         /// <param name="adapter">Data adapter to connect.</param>
         /// <returns>Returns new command builder connected to the given data adapter.</returns>
-        private DbCommandBuilder CreateCommandBuilder(DbDataAdapter adapter)
+        public DbCommandBuilder CreateCommandBuilder(DbDataAdapter adapter)
         {
             if (Factory == null)
                 return null;

Modified: trunk/VisualStudio/Enumerators/StoredProcedureColumnEnumerator.cs
===================================================================
--- trunk/VisualStudio/Enumerators/StoredProcedureColumnEnumerator.cs	2007-06-14 16:33:34 UTC (rev 760)
+++ trunk/VisualStudio/Enumerators/StoredProcedureColumnEnumerator.cs	2007-06-14 16:36:44 UTC (rev 761)
@@ -29,15 +29,53 @@
         {
             DataConnectionWrapper connectionWrapper = new DataConnectionWrapper(Connection);
             string spName = String.Format("{0}.{1}", restrictions[1], restrictions[2]);
-            IDataReader reader = connectionWrapper.ExecuteReader(spName, true, CommandBehavior.SchemaOnly);
-            DataTable dt = reader.GetSchemaTable();
-            reader.Close();
 
-            dt.Columns.Add(new DataColumn("RoutineName", typeof(string)));
-            foreach (DataRow row in dt.Rows)
-                row["RoutineName"] = restrictions[2];
+            DbConnection c = connectionWrapper.GetOpenConnection();
+            try
+            {
+                string[] parmRest = new string[5];
+                parmRest[1] = (string)restrictions[1];
+                parmRest[2] = (string)restrictions[2];
+                parmRest[3] = (string)restrictions[3];
+                DataTable parmTable = c.GetSchema("Procedure Parameters", parmRest);
 
-            return new AdoDotNetDataTableReader(dt);
+                DbCommand cmd = c.CreateCommand();
+                cmd.CommandText = spName;
+                cmd.CommandType = CommandType.StoredProcedure;
+
+                foreach (DataRow row in parmTable.Rows)
+                {
+                    if (row["IS_RESULT"].Equals("YES")) continue;
+
+                    DbParameter p = cmd.CreateParameter();
+                    p.ParameterName = row["PARAMETER_NAME"].ToString();
+                    p.Value = GetDefaultValue(row["DATA_TYPE"].ToString());
+                    cmd.Parameters.Add(p);
+                }
+
+                using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly))
+                {
+                    DataTable dt = reader.GetSchemaTable();
+
+                    dt.Columns.Add(new DataColumn("RoutineName", typeof(string)));
+                    foreach (DataRow row in dt.Rows)
+                        row["RoutineName"] = restrictions[2];
+
+                    return new AdoDotNetDataTableReader(dt);
+                }
+            }
+            finally
+            {
+                connectionWrapper.ReleaseConnection();
+            }
         }
+
+        private object GetDefaultValue(string dataType)
+        {
+            if (dataType == "VARCHAR" || dataType == "VARBINARY" ||
+                dataType == "ENUM" || dataType == "SET" || dataType == "CHAR")
+                return "";
+            return 0;
+        }
     }
 }

Thread
Connector/NET commit: r761 - in trunk: . VisualStudio VisualStudio/Enumeratorsrburnett14 Jun