2008-04-01 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Tue, 1 Apr 2008 17:33:08 +0000 (17:33 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Tue, 1 Apr 2008 17:33:08 +0000 (17:33 -0000)
* SqlParameter.cs: ConvertToFrameworkType must handle empty
strings gracefully - a DBNull.Value must be returned in this
case.

* SqlCommand.cs: DeriveParameters should split the stored
procedure name into the schema name and procedure name before
querying its parameters.

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

mcs/class/System.Data/System.Data.SqlClient/ChangeLog
mcs/class/System.Data/System.Data.SqlClient/SqlCommand.cs
mcs/class/System.Data/System.Data.SqlClient/SqlParameter.cs

index d3b2daa79d46b451556e758dc720d7dadebe2e4e..bb3eaa828e55db594aefd90d92cc18bac99ceaf4 100644 (file)
@@ -1,3 +1,13 @@
+2008-04-01  Marek Habersack  <mhabersack@novell.com>
+
+       * SqlParameter.cs: ConvertToFrameworkType must handle empty
+       strings gracefully - a DBNull.Value must be returned in this
+       case.
+
+       * SqlCommand.cs: DeriveParameters should split the stored
+       procedure name into the schema name and procedure name before
+       querying its parameters.
+
 2008-03-03  Ankit Jain  <jankit@novell.com>
 
        * SqlClientMetaDataCollectionNames.cs: Set the field values.
index 72ce26478f6d58d3ce8ba81ca6f0606e94835c5c..fdca5789fd2775ecd61031da2387e6ff10698c2b 100644 (file)
@@ -360,9 +360,19 @@ namespace System.Data.SqlClient {
                                throw new InvalidOperationException (String.Format ("SqlCommand DeriveParameters only supports CommandType.StoredProcedure, not CommandType.{0}", commandType));
                        ValidateCommand ("DeriveParameters");
 
+                       string procName = CommandText;
+                       string schemaName = String.Empty;
+                       int dotPosition = procName.IndexOf ('.');
+                       if (dotPosition >= 0) {
+                               schemaName = procName.Substring (0, dotPosition);
+                               procName = procName.Substring (dotPosition + 1);
+                       }
+                       
                        SqlParameterCollection localParameters = new SqlParameterCollection (this);
-                       localParameters.Add ("@procedure_name", SqlDbType.NVarChar, CommandText.Length).Value = CommandText;
-
+                       localParameters.Add ("@procedure_name", SqlDbType.NVarChar, procName.Length).Value = procName;
+                       if (schemaName.Length > 0)
+                               localParameters.Add ("@procedure_schema", SqlDbType.NVarChar, schemaName.Length).Value = schemaName;
+                       
                        string sql = "sp_procedure_params_rowset";
 
                        try {
index 628c08a86d4234c20dfbaa2cf575be962561cd1b..0783c7131b9ce48db6ab0925029fa5ba270cadd1 100644 (file)
@@ -865,6 +865,10 @@ namespace System.Data.SqlClient {
                {
                        if (value == null || value == DBNull.Value)
                                return value;
+                       
+                       if (value is string && ((string)value).Length == 0)
+                               return DBNull.Value;
+                       
                        switch (sqlDbType)  {
                        case SqlDbType.BigInt :
                                return Convert.ChangeType (value, typeof (Int64));