2010-01-18 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Mon, 18 Jan 2010 22:34:03 +0000 (22:34 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Mon, 18 Jan 2010 22:34:03 +0000 (22:34 -0000)
* Parameter.cs: added missing 3.5 APIs - constructors taking
DbType as one of the parameters, ConvertDbTypeToTypeCode,
ConvertTypeCodeToDbType and GetDatabaseType. Fixes bug #567850

2010-01-18  Marek Habersack  <mhabersack@novell.com>

* ParameterTest.cs: added tests for ConvertDbTypeToTypeCode,
ConvertTypeCodeToDbType and constructors taking DbType as one of
the parameters.

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

mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/ControlParameter.cs
mcs/class/System.Web/System.Web.UI.WebControls/Parameter.cs
mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/Test/System.Web.UI.WebControls/ParameterTest.cs

index 37fac83ddfe8de11d714282cf8caa496711cb1a9..8b91b62d090449591be9ace031f6291848964f9d 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-18  Marek Habersack  <mhabersack@novell.com>
+
+       * Parameter.cs: added missing 3.5 APIs - constructors taking
+       DbType as one of the parameters, ConvertDbTypeToTypeCode,
+       ConvertTypeCodeToDbType and GetDatabaseType. Fixes bug #567850
+
 2010-01-15  Marek Habersack  <mhabersack@novell.com>
 
        * ChangePassword.cs: BaseChangePasswordContainer forwards
index c64bb93c9cdab5e5acf7b05494a6f42a36b99b9f..0c14622f03d5f3d40cd9a65d7a3ae3a27912131f 100644 (file)
@@ -31,6 +31,7 @@
 #if NET_2_0
 using System.Collections;
 using System.Collections.Specialized;
+using System.Data;
 using System.Text;
 using System.ComponentModel;
 using System.Reflection;
@@ -66,6 +67,12 @@ namespace System.Web.UI.WebControls {
                        ControlID = controlID;
                        PropertyName = propertyName;
                }
+
+               public ControlParameter (string name, DbType dbType, string controlID, string propertyName) : base (name, dbType)
+               {
+                       ControlID = controlID;
+                       PropertyName = propertyName;
+               }
                
                protected override Parameter Clone ()
                {
index 79a8d05037eb9ef79ad92a09ab19e1dcd567c776..81faca7b4bb51a4fb7a18867aeb5dd2afc92d896 100644 (file)
@@ -68,6 +68,149 @@ namespace System.Web.UI.WebControls {
                {
                        this.DefaultValue = defaultValue;
                }
+
+               public Parameter (string name, DbType dbType) : this (name)
+               {
+                       this.DbType = dbType;
+               }
+
+               public Parameter (string name, DbType dbType, string defaultValue) : this (name, dbType)
+               {
+                       this.DefaultValue = defaultValue;
+               }
+
+               public static TypeCode ConvertDbTypeToTypeCode (DbType dbType)
+               {
+                       switch (dbType) {
+                               case DbType.AnsiString:
+                               case DbType.AnsiStringFixedLength:
+                               case DbType.StringFixedLength:
+                               case DbType.String:
+                                       return TypeCode.String;
+
+                               case DbType.Binary:
+                               case DbType.Guid:
+                               case DbType.Object:
+                               case DbType.Xml:
+                               case DbType.DateTimeOffset:
+                                       return TypeCode.Object;
+
+                               case DbType.Byte:
+                                       return TypeCode.Byte;
+
+                               case DbType.Boolean:
+                                       return TypeCode.Boolean;
+
+                               case DbType.Currency:
+                               case DbType.Decimal:
+                               case DbType.VarNumeric:
+                                       return TypeCode.Decimal;
+
+                               case DbType.Date:
+                               case DbType.DateTime:
+                               case DbType.DateTime2:
+                               case DbType.Time:
+                                       return TypeCode.DateTime;
+
+                               case DbType.Double:
+                                       return TypeCode.Double;
+                               
+                               case DbType.Int16:
+                                       return TypeCode.Int16;
+
+                               case DbType.Int32:
+                                       return TypeCode.Int32;
+
+                               case DbType.Int64:
+                                       return TypeCode.Int64;
+                               
+                               case DbType.SByte:
+                                       return TypeCode.SByte;
+
+                               case DbType.Single:
+                                       return TypeCode.Single;
+
+                               case DbType.UInt16:
+                                       return TypeCode.UInt16;
+
+                               case DbType.UInt32:
+                                       return TypeCode.UInt32;
+
+                               case DbType.UInt64:
+                                       return TypeCode.UInt64;
+
+                               default:
+                                       return TypeCode.Object;
+                       }
+               }
+
+               public static DbType ConvertTypeCodeToDbType (TypeCode typeCode)
+               {
+                       switch (typeCode) {
+                               case TypeCode.Empty:
+                               case TypeCode.Object:
+                               case TypeCode.DBNull:                                   
+                                       return DbType.Object;
+
+                               case TypeCode.Boolean:
+                                       return DbType.Boolean;
+
+                               case TypeCode.Char:
+                                       return DbType.StringFixedLength;
+
+                               case TypeCode.SByte:
+                                       return DbType.SByte;
+
+                               case TypeCode.Byte:
+                                       return DbType.Byte;
+
+                               case TypeCode.Int16:
+                                       return DbType.Int16;
+
+                               case TypeCode.UInt16:
+                                       return DbType.UInt16;
+
+                               case TypeCode.Int32:
+                                       return DbType.Int32;
+
+                               case TypeCode.UInt32:
+                                       return DbType.UInt32;
+
+                               case TypeCode.Int64:
+                                       return DbType.Int64;
+
+                               case TypeCode.UInt64:
+                                       return DbType.UInt64;
+
+                               case TypeCode.Single:
+                                       return DbType.Single;
+
+                               case TypeCode.Double:
+                                       return DbType.Double;
+
+                               case TypeCode.Decimal:
+                                       return DbType.Decimal;
+
+                               case TypeCode.DateTime:
+                                       return DbType.DateTime;
+
+                               case TypeCode.String:
+                                       return DbType.String;
+
+                               default:
+                                       return DbType.Object;
+                       }
+               }
+
+               public DbType GetDatabaseType ()
+               {
+                       DbType dt = this.DbType;
+
+                       if (dt != DbType.Object)
+                               throw new InvalidOperationException ("The DbType property is already set to a value other than DbType.Object.");
+
+                       return ConvertTypeCodeToDbType (this.Type);
+               }
                
                protected virtual Parameter Clone ()
                {
@@ -224,8 +367,7 @@ namespace System.Web.UI.WebControls {
                [DefaultValueAttribute (TypeCode.Empty)]
                [WebCategoryAttribute ("Parameter"), 
                WebSysDescriptionAttribute("Represents type of the parameter.")]
-               public TypeCode Type
-               {
+               public TypeCode Type {
                        get { return (TypeCode) ViewState.GetInt ("Type", (int)TypeCode.Empty); }
                        set {
                                
index 5dc2eaac908dd41bbccdd97e3bb9520c8254dedf..6a695802be3172d61a6cfbccf44d17cccd9eacb3 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-18  Marek Habersack  <mhabersack@novell.com>
+
+       * ParameterTest.cs: added tests for ConvertDbTypeToTypeCode,
+       ConvertTypeCodeToDbType and constructors taking DbType as one of
+       the parameters.
+
 2010-01-15  Marek Habersack  <mhabersack@novell.com>
 
        * ChangePasswordTest.cs: added test for looking for controls in
index f41739d3a33444b1fd5f19d76e5b2d11ea10da28..7e0399b0bd9838bb561b4a522eeb44ec7b18be63 100644 (file)
@@ -274,6 +274,80 @@ namespace MonoTests.System.Web.UI.WebControls
                        Assert.AreEqual ("ID", copy.Name, "Name");
                        
                }
+
+               [Test]
+               public void Parameter_DbTypeConstructors ()
+               {
+                       int counter = 1;
+
+                       foreach (var e in Enum.GetValues (typeof (DbType))) {
+                               var p = new Parameter ("name", (DbType)e);
+                               Assert.AreEqual (p.DbType, (DbType)e, "#A" + counter.ToString ());
+                               counter++;
+                       }
+
+                       counter = 1;
+                       foreach (var e in Enum.GetValues (typeof (DbType))) {
+                               var p = new Parameter ("name", (DbType)e, "default");
+                               Assert.AreEqual (p.DbType, (DbType)e, "#B" + counter.ToString ());
+                               counter++;
+                       }
+               }
+               
+               [Test]
+               public void Parameter_ConvertTypeCodeToDbType ()
+               {
+                       Assert.AreEqual (DbType.Object, Parameter.ConvertTypeCodeToDbType (TypeCode.Empty), "#A1");
+                       Assert.AreEqual (DbType.Object, Parameter.ConvertTypeCodeToDbType (TypeCode.Object), "#A2");
+                       Assert.AreEqual (DbType.Object, Parameter.ConvertTypeCodeToDbType (TypeCode.DBNull), "#A3");
+                       Assert.AreEqual (DbType.Boolean, Parameter.ConvertTypeCodeToDbType (TypeCode.Boolean), "#A4");
+                       Assert.AreEqual (DbType.StringFixedLength, Parameter.ConvertTypeCodeToDbType (TypeCode.Char), "#A5");
+                       Assert.AreEqual (DbType.SByte, Parameter.ConvertTypeCodeToDbType (TypeCode.SByte), "#A6");
+                       Assert.AreEqual (DbType.Byte, Parameter.ConvertTypeCodeToDbType (TypeCode.Byte), "#A7");
+                       Assert.AreEqual (DbType.Int16, Parameter.ConvertTypeCodeToDbType (TypeCode.Int16), "#A8");
+                       Assert.AreEqual (DbType.UInt16, Parameter.ConvertTypeCodeToDbType (TypeCode.UInt16), "#A9");
+                       Assert.AreEqual (DbType.Int32, Parameter.ConvertTypeCodeToDbType (TypeCode.Int32), "#A10");
+                       Assert.AreEqual (DbType.UInt32, Parameter.ConvertTypeCodeToDbType (TypeCode.UInt32), "#A11");
+                       Assert.AreEqual (DbType.Int64, Parameter.ConvertTypeCodeToDbType (TypeCode.Int64), "#A12");
+                       Assert.AreEqual (DbType.UInt64, Parameter.ConvertTypeCodeToDbType (TypeCode.UInt64), "#A13");
+                       Assert.AreEqual (DbType.Single, Parameter.ConvertTypeCodeToDbType (TypeCode.Single), "#A14");
+                       Assert.AreEqual (DbType.Double, Parameter.ConvertTypeCodeToDbType (TypeCode.Double), "#A15");
+                       Assert.AreEqual (DbType.Decimal, Parameter.ConvertTypeCodeToDbType (TypeCode.Decimal), "#A16");
+                       Assert.AreEqual (DbType.DateTime, Parameter.ConvertTypeCodeToDbType (TypeCode.DateTime), "#A17");
+                       Assert.AreEqual (DbType.String, Parameter.ConvertTypeCodeToDbType (TypeCode.String), "#A18");
+               }
+
+               [Test]
+               public void Parameter_ConvertDbTypeToTypeCode ()
+               {
+                       Assert.AreEqual (TypeCode.String, Parameter.ConvertDbTypeToTypeCode (DbType.AnsiString), "#A1");
+                       Assert.AreEqual (TypeCode.Object, Parameter.ConvertDbTypeToTypeCode (DbType.Binary), "#A2");
+                       Assert.AreEqual (TypeCode.Byte, Parameter.ConvertDbTypeToTypeCode (DbType.Byte), "#A3");
+                       Assert.AreEqual (TypeCode.Boolean, Parameter.ConvertDbTypeToTypeCode (DbType.Boolean), "#A4");
+                       Assert.AreEqual (TypeCode.Decimal, Parameter.ConvertDbTypeToTypeCode (DbType.Currency), "#A5");
+                       Assert.AreEqual (TypeCode.DateTime, Parameter.ConvertDbTypeToTypeCode (DbType.Date), "#A6");
+                       Assert.AreEqual (TypeCode.DateTime, Parameter.ConvertDbTypeToTypeCode (DbType.DateTime), "#A7");
+                       Assert.AreEqual (TypeCode.Decimal, Parameter.ConvertDbTypeToTypeCode (DbType.Decimal), "#A8");
+                       Assert.AreEqual (TypeCode.Double, Parameter.ConvertDbTypeToTypeCode (DbType.Double), "#A9");
+                       Assert.AreEqual (TypeCode.Object, Parameter.ConvertDbTypeToTypeCode (DbType.Guid), "#A10");
+                       Assert.AreEqual (TypeCode.Int16, Parameter.ConvertDbTypeToTypeCode (DbType.Int16), "#A11");
+                       Assert.AreEqual (TypeCode.Int32, Parameter.ConvertDbTypeToTypeCode (DbType.Int32), "#A12");
+                       Assert.AreEqual (TypeCode.Int64, Parameter.ConvertDbTypeToTypeCode (DbType.Int64), "#A13");
+                       Assert.AreEqual (TypeCode.Object, Parameter.ConvertDbTypeToTypeCode (DbType.Object), "#A14");
+                       Assert.AreEqual (TypeCode.SByte, Parameter.ConvertDbTypeToTypeCode (DbType.SByte), "#A15");
+                       Assert.AreEqual (TypeCode.Single, Parameter.ConvertDbTypeToTypeCode (DbType.Single), "#A16");
+                       Assert.AreEqual (TypeCode.String, Parameter.ConvertDbTypeToTypeCode (DbType.String), "#A17");
+                       Assert.AreEqual (TypeCode.DateTime, Parameter.ConvertDbTypeToTypeCode (DbType.Time), "#A18");
+                       Assert.AreEqual (TypeCode.UInt16, Parameter.ConvertDbTypeToTypeCode (DbType.UInt16), "#A19");
+                       Assert.AreEqual (TypeCode.UInt32, Parameter.ConvertDbTypeToTypeCode (DbType.UInt32), "#A20");
+                       Assert.AreEqual (TypeCode.UInt64, Parameter.ConvertDbTypeToTypeCode (DbType.UInt64), "#A21");
+                       Assert.AreEqual (TypeCode.Decimal, Parameter.ConvertDbTypeToTypeCode (DbType.VarNumeric), "#A22");
+                       Assert.AreEqual (TypeCode.String, Parameter.ConvertDbTypeToTypeCode (DbType.AnsiStringFixedLength), "#A23");
+                       Assert.AreEqual (TypeCode.String, Parameter.ConvertDbTypeToTypeCode (DbType.StringFixedLength), "#A24");
+                       Assert.AreEqual (TypeCode.Object, Parameter.ConvertDbTypeToTypeCode (DbType.Xml), "#A25");
+                       Assert.AreEqual (TypeCode.DateTime, Parameter.ConvertDbTypeToTypeCode (DbType.DateTime2), "#A26");
+                       Assert.AreEqual (TypeCode.Object, Parameter.ConvertDbTypeToTypeCode (DbType.DateTimeOffset), "#A27");
+               }
        }
 }
 #endif