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;
+ }
}
}