From: rburnett Date: June 14 2007 4:36pm Subject: Connector/NET commit: r761 - in trunk: . VisualStudio VisualStudio/Enumerators List-Archive: http://lists.mysql.com/commits/28784 X-Bug: 29098 Message-Id: <200706141636.l5EGajmP001377@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 /// @@ -1024,7 +1036,7 @@ /// /// Data adapter to connect. /// Returns new command builder connected to the given data adapter. - 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; + } } }