2007-02-13 Adar Wesley <adarw@mainsoft.com>
authorAdar Wesley <adar@mono-cvs.ximian.com>
Tue, 13 Feb 2007 11:18:11 +0000 (11:18 -0000)
committerAdar Wesley <adar@mono-cvs.ximian.com>
Tue, 13 Feb 2007 11:18:11 +0000 (11:18 -0000)
        * ObjectDataSourceView.cs: fixed parameter merging and added more tests

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

mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceView.cs
mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceTest.cs

index bf571c8bb4bb46cf0515fbed3cc00c8c02fd3f13..f1f6c4b1f188f26dab3b5e9e8c5ce4703ab79cbc 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-13 Adar Wesley <adarw@mainsoft.com>
+
+       * ObjectDataSourceView.cs: fixed parameter merging and added more tests
+
 2007-02-12 Igor Zelmanovich <igorz@mainsoft.com>
 
        * Literal.cs: implemented 2.0 feature - Mode.
index 538219d9e4c6725146eea23d103d096a1c58cfde..5bd4d5ff4959b9ce92608040debdda2e824ba5f6 100644 (file)
@@ -618,14 +618,7 @@ namespace System.Web.UI.WebControls
                                throw new InvalidOperationException ("ConflictDetection is set to CompareAllValues and oldValues collection is null or empty.");
 
                        IDictionary oldDataValues;
-                       if (ConflictDetection == ConflictOptions.CompareAllValues) {
-                               oldDataValues = new Hashtable ();
-                               foreach (DictionaryEntry de in keys)
-                                       oldDataValues [de.Key] = de.Value;
-                               foreach (DictionaryEntry de in oldValues)
-                                       oldDataValues [de.Key] = de.Value;
-                       } else
-                               oldDataValues = keys;
+                       oldDataValues = BuildOldValuesList (keys, oldValues, false);
                                        
                        IOrderedDictionary paramValues;
                        MethodInfo method;
@@ -656,51 +649,37 @@ namespace System.Web.UI.WebControls
 
                        return -1;
                }
-               
+
                protected override int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)
                {
                        IOrderedDictionary paramValues;
                        MethodInfo method;
-                       
+
+                       IDictionary oldDataValues;
+                       oldDataValues = BuildOldValuesList (keys, oldValues, true);
+
                        if (DataObjectTypeName.Length == 0)
                        {
                                IDictionary dataValues;
-                               IDictionary oldDataValues;
-                               if (ConflictDetection == ConflictOptions.CompareAllValues) {
-                                       oldDataValues = new Hashtable ();
-                                       dataValues = values;
-                                       foreach (DictionaryEntry de in keys)
-                                               oldDataValues [de.Key] = de.Value;
-                                       foreach (DictionaryEntry de in oldValues)
-                                               oldDataValues [de.Key] = de.Value;
-                               } else {
-                                       oldDataValues = keys;
-                                       dataValues = values;
-                               }
+                               dataValues = values;
                                paramValues = MergeParameterValues (UpdateParameters, dataValues, oldDataValues, false);
                                method = GetObjectMethod (UpdateMethod, paramValues, DataObjectMethodType.Update);
                        }
                        else
                        {
-                               IDictionary dataValues = new Hashtable ();
-                               IDictionary oldDataValues;
-                               
-                               foreach (DictionaryEntry de in values)
-                                       dataValues [de.Key] = de.Value;
-                                       
-                               if (ConflictDetection == ConflictOptions.CompareAllValues) {
-                                       oldDataValues = new Hashtable ();
-                                       foreach (DictionaryEntry de in keys) {
-                                               oldDataValues [de.Key] = de.Value;
-                                               dataValues [de.Key] = de.Value;
-                                       }
-                                       foreach (DictionaryEntry de in oldValues)
-                                               oldDataValues [de.Key] = de.Value;
-                               } else {
+                               if (ConflictDetection != ConflictOptions.CompareAllValues) {
                                        oldDataValues = null;
+                               }
+                               IDictionary dataValues = new Hashtable ();
+                               if (keys != null) {
                                        foreach (DictionaryEntry de in keys)
                                                dataValues [de.Key] = de.Value;
                                }
+                               if (values != null) {
+                                       foreach (DictionaryEntry de in values)
+                                               dataValues [de.Key] = de.Value;
+                               }
+
                                method = ResolveDataObjectMethod (UpdateMethod, dataValues, oldDataValues, out paramValues);
                        }                       
 
@@ -722,7 +701,32 @@ namespace System.Web.UI.WebControls
 
                        return -1;
                }
-               
+
+               private IDictionary BuildOldValuesList (IDictionary keys, IDictionary oldValues, bool keysWin) 
+               {
+                       IDictionary oldDataValues;
+                       if (ConflictDetection == ConflictOptions.CompareAllValues) {
+                               oldDataValues = new Hashtable ();
+                               if (keys != null && !keysWin) {
+                                       foreach (DictionaryEntry de in keys)
+                                               oldDataValues [de.Key] = de.Value;
+                               }
+                               if (oldValues != null) {
+                                       foreach (DictionaryEntry de in oldValues)
+                                               oldDataValues [de.Key] = de.Value;
+                               }
+                               if (keys != null && keysWin) {
+                                       foreach (DictionaryEntry de in keys)
+                                               oldDataValues [de.Key] = de.Value;
+                               }
+                       }
+                       else {
+                               oldDataValues = keys;
+                       }
+
+                       return oldDataValues;
+               }
+
                protected internal override IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
                {
                        arguments.RaiseUnsupportedCapabilitiesError (this);
@@ -865,6 +869,7 @@ namespace System.Web.UI.WebControls
                        MemberInfo[] methods = ObjectType.GetMember (methodName, MemberTypes.Method, BindingFlags.Instance | 
                                                                                 BindingFlags.Static | 
                                                                                 BindingFlags.Public | 
+                                                                                BindingFlags.IgnoreCase |
                                                                                 BindingFlags.FlattenHierarchy);
                        if (methods.Length > 1) {
                                // MSDN: The ObjectDataSource resolves method overloads by method name and number
@@ -1046,7 +1051,7 @@ namespace System.Web.UI.WebControls
                                        object value = FindValueByName (p.Name, oldValues, true);
                                        if (value != null) {
                                                object dataValue = p.ConvertValue (value);
-                                               mergedValues [FormatOldParameter (p.Name)] = dataValue;
+                                               mergedValues [p.Name] = dataValue;
                                                oldAdded = true;
                                        }
                                }
@@ -1207,3 +1212,4 @@ namespace System.Web.UI.WebControls
 #endif
 
 
+
index f0c86fa5d3de4ee08ecd81d299ad4eeff2c327d9..338389566a59fa166158a6143c30f05490ebeb81 100644 (file)
@@ -46,7 +46,7 @@ using MonoTests.stand_alone.WebHarness;
 
 
 namespace MonoTests.System.Web.UI.WebControls
-{\r
+{
        public class  ObjectDataSourcePoker : ObjectDataSource
        {
                public ObjectDataSourcePoker () // constructor
@@ -92,57 +92,57 @@ namespace MonoTests.System.Web.UI.WebControls
                public void DoLoadControlState (object savedState)
                {
                         base.LoadControlState (savedState);
-               }\r
-\r
-               public new DataSourceView GetView (string viewName)\r
-               {\r
-                       return base.GetView (viewName);\r
-               }
-       }\r
-\r
-       #region Hellp_class_view\r
-       public class CustomObjectDataSourceView : ObjectDataSourceView\r
-       {\r
-               public CustomObjectDataSourceView (ObjectDataSource owner, string name, HttpContext context)\r
-                       : base (owner, name, context)\r
-               {\r
-               }\r
-\r
-               public new int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)\r
-               {\r
-                       return base.ExecuteUpdate (keys, values, oldValues);\r
-               }\r
-\r
-               public new int ExecuteDelete (IDictionary keys, IDictionary oldValues)\r
-               {\r
-                       return base.ExecuteDelete (keys, oldValues);\r
-               }\r
-\r
-               public new IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)\r
-               {\r
-                       return base.ExecuteSelect (arguments);\r
-               }\r
-\r
-               public new int ExecuteInsert (IDictionary values)\r
-               {\r
-                       return base.ExecuteInsert (values);\r
-               }\r
-\r
-       }\r
+               }
+
+               public new DataSourceView GetView (string viewName)
+               {
+                       return base.GetView (viewName);
+               }
+       }
+
+       #region Hellp_class_view
+       public class CustomObjectDataSourceView : ObjectDataSourceView
+       {
+               public CustomObjectDataSourceView (ObjectDataSource owner, string name, HttpContext context)
+                       : base (owner, name, context)
+               {
+               }
+
+               public new int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)
+               {
+                       return base.ExecuteUpdate (keys, values, oldValues);
+               }
+
+               public new int ExecuteDelete (IDictionary keys, IDictionary oldValues)
+               {
+                       return base.ExecuteDelete (keys, oldValues);
+               }
+
+               public new IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
+               {
+                       return base.ExecuteSelect (arguments);
+               }
+
+               public new int ExecuteInsert (IDictionary values)
+               {
+                       return base.ExecuteInsert (values);
+               }
+
+       }
        #endregion
 
        [TestFixture]
-       public class ObjectDataSourceTest\r
-       {\r
-               \r
-\r
-\r
+       public class ObjectDataSourceTest
+       {
+               
+
+
                [TestFixtureTearDown]
                public void TearDown ()
                {
                        WebTest.Unload ();
-               }\r
-\r
+               }
+
                public static void InitObjectDataSource (ObjectDataSourcePoker ds, string action)
                {
                        Parameter p1, p2, p3;
@@ -182,13 +182,13 @@ namespace MonoTests.System.Web.UI.WebControls
                        ds.UpdateParameters.Add (p1);
                        ds.UpdateParameters.Add (p2);
                        ds.UpdateParameters.Add (p3);
-                       ds.ID = "MyObject";\r
-                       ds.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject"; //,MonoTests.System.Web
-                                                                                     \r
-\r
+                       ds.ID = "MyObject";
+                       ds.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                                                                                     
+
                }
 
-               //Default properties\r
+               //Default properties
                
 
                [Test]          
@@ -271,16 +271,9 @@ namespace MonoTests.System.Web.UI.WebControls
                        Assert.AreEqual ("sortExpression", ods.SortParameterName, "SortParameterName");                 
                        ods.StartRowIndexParameterName = "ID";
                        Assert.AreEqual ("ID", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
-                       Assert.AreEqual ("MonoTests.System.Web.UI.WebControls.MyTableObject", ods.TypeName, "TypeName");
+                       Assert.AreEqual (typeof (MyTableObject).AssemblyQualifiedName, ods.TypeName, "TypeName");
                        Assert.AreEqual ("Update", ods.UpdateMethod, "UpdateMethod ");
-                       Assert.AreEqual ("FName", ods.UpdateParameters[1].Name, "UpdateParameters");            
-                       
-               }
-
-               [Test]
-               public void ObjectDataSource_NotWorkingAssignToDefaultProperties ()
-               {
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       Assert.AreEqual ("FName", ods.UpdateParameters[1].Name, "UpdateParameters");
                        ods.CacheDuration = 1000;
                        Assert.AreEqual (1000, ods.CacheDuration, "CacheDuration");
                        ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
@@ -293,6 +286,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        Assert.AreEqual (true, ods.EnableCaching, "EnableCaching ");
                        ods.SqlCacheDependency = "Northwind:Employees";
                        Assert.AreEqual ("Northwind:Employees", ods.SqlCacheDependency, "SqlCacheDependency");
+                       
                }
 
                //ViewState
@@ -326,7 +320,6 @@ namespace MonoTests.System.Web.UI.WebControls
                }
 
                [Test]
-               [Category("NotWorking")]
                [Category ("NunitWeb")]
                public void ObjectDataSource_ConvertNullToDBNull ()
                {
@@ -346,7 +339,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        catch (Exception ex) {
                                Assert.AreEqual (true,
                                        ex.Message.Contains ("type 'System.DBNull' cannot be converted to type 'System.String'") || // dotnet
-                                       ex.Message.Contains ("Value cannot be null."), "ConvertNullToDBNull"); // mono
+                                       ex.Message.Equals ("parameters"), "ConvertNullToDBNull"); // mono
                                dbnull = true;
                        }
                        Assert.AreEqual (true, dbnull, "ConvertNullToDBNull2");
@@ -427,7 +420,6 @@ namespace MonoTests.System.Web.UI.WebControls
 
                [Test]
                [Category ("NunitWeb")]
-               [Category ("NotWorking")]
                public void ObjectDataSource_EnablePaging ()
                {
                        string html = new WebTest (PageInvoker.CreateOnLoad (
@@ -467,7 +459,7 @@ namespace MonoTests.System.Web.UI.WebControls
                        GridView  gv = new GridView ();
                        ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
                        ods.ID = "ObjectDataSource1";
-                       ods.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject";
+                       ods.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
                        ods.SelectMethod = "SelectForPaging";
                        ods.EnablePaging = true;
                        ods.SelectCountMethod = "SelectCount";
@@ -764,420 +756,594 @@ namespace MonoTests.System.Web.UI.WebControls
                static void odc_Deleted (object sender, ObjectDataSourceStatusEventArgs e)
                {
                        deleted = true;                 
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_SelectExecute ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));\r
-                       ArrayList ls =(ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));\r
-                       Assert.AreEqual ("TestSelect", ls[0], "SelectExecute");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_SelectExecuteCaseSensitive ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectParameters.Add (new Parameter ("fname", TypeCode.String, "TestSelect"));\r
-                       ArrayList ls = (ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));\r
-                       Assert.AreEqual ("TestSelect", ls[0], "SelectExecuteCaseSensitive");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_DeleteExecute ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.DeleteMethod = "Delete";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.DeleteParameters.Add (p1);\r
-                       view.DeleteParameters.Add (p2);\r
-                       view.DeleteParameters.Add (p3);\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       \r
-                       Hashtable value = new Hashtable();\r
-                       value.Add("ID","test_id");\r
-                       view.ExecuteDelete (value, null);\r
-                       Assert.AreEqual (true, MyTableObject.DeleteWithOldValueCollection, "DeleteExecute");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_DeleteExecuteParameterCaseSensitive_1 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.DeleteMethod = "Delete";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("id", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("lname", TypeCode.String, "chand");\r
-                       view.DeleteParameters.Add (p1);\r
-                       view.DeleteParameters.Add (p2);\r
-                       view.DeleteParameters.Add (p3);\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "test_id");\r
-                       view.ExecuteDelete (value, null);\r
-                       Assert.AreEqual (true, MyTableObject.DeleteWithOldValueCollection, "DeleteExecuteParameterCaseSensitive");\r
-               }\r
-\r
-               [Test]\r
-               [Category("NotWorking")]\r
-               public void ObjectDataSource_DeleteExecuteMethodCaseSensitive ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.DeleteMethod = "delete";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.DeleteParameters.Add (p1);\r
-                       view.DeleteParameters.Add (p2);\r
-                       view.DeleteParameters.Add (p3);\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "test_id");\r
-                       view.ExecuteDelete (value, null);\r
-                       Assert.AreEqual (true, MyTableObject.DeleteWithOldValueCollection, "DeleteExecuteMethodCaseSensitive");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_InsertExecute_1 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.InsertMethod = "Insert";\r
-\r
-                       //This hashtable ovveride \r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "test_id");\r
-                       view.ExecuteInsert (value);\r
-                       Assert.AreEqual (true, MyTableObject.InsertWithParameters, "InsertExecute#1");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_InsertExecute_2 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.InsertMethod = "Insert";\r
-\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.InsertParameters.Add (p1);\r
-                       view.InsertParameters.Add (p2);\r
-                       view.InsertParameters.Add (p3);\r
-\r
-                       //This hashtable ovveride \r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("T", "test_id");\r
-\r
-                       //Merge parameters\r
-                       view.ExecuteInsert (value);\r
-                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute#2");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_InsertParametersCaseSensitive ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.InsertMethod = "Insert";\r
-\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("id", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("lname", TypeCode.String, "chand");\r
-                       view.InsertParameters.Add (p1);\r
-                       view.InsertParameters.Add (p2);\r
-                       view.InsertParameters.Add (p3);\r
-\r
-                       //This hashtable ovveride \r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("t", "test_id");\r
-\r
-                       //Merge parameters\r
-                       view.ExecuteInsert (value);\r
-                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertParametersCaseSensitive");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_UpdateExecute_1()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "Update";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.UpdateParameters.Add (p1);\r
-                       view.UpdateParameters.Add (p2);\r
-                       view.UpdateParameters.Add (p3);\r
-                                       \r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("P", "1000");\r
-                       view.ExecuteUpdate (value, null, null);\r
-                       Assert.AreEqual (true, MyTableObject.UpdateWithOldValueCollection, "UpdateExecute#1");\r
-               }\r
-\r
-               [Test]\r
-               public void ObjectDataSource_UpdateExecute_2 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "TryUpdate";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.UpdateParameters.Add (p1);\r
-                       view.UpdateParameters.Add (p2);\r
-                       view.UpdateParameters.Add (p3);\r
-\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("P", "1001");\r
-                       \r
-                       view.ExecuteUpdate (null, value, null);\r
-                       Assert.AreEqual (true, MyTableObject.UpdateWithMergedCollection, "UpdateExecute#2");\r
-               }\r
-\r
-               [Test]\r
-               [Category ("NotWorking")]\r
-               public void ObjectDataSource_UpdateExecute_CompareAllValues ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "TryUpdate_1";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.UpdateParameters.Add (p1);\r
-                       view.UpdateParameters.Add (p2);\r
-                       view.UpdateParameters.Add (p3);\r
-\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       view.ConflictDetection = ConflictOptions.CompareAllValues;\r
-                       \r
-                       \r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "1001");\r
-\r
-                       view.ConflictDetection = ConflictOptions.CompareAllValues;\r
-                       view.ExecuteUpdate (null,null, value);\r
-                       Assert.AreEqual (true, MyTableObject.UpdateWithCompareAllValues, "CompareAllValues");\r
-               }\r
-\r
-               [Test]\r
-               [Category ("NotWorking")]\r
-               public void ObjectDataSource_UpdateExecute_DataObjectTypeName ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.DataObjectTypeName = "MonoTests.System.Web.UI.WebControls.NewData,MonoTests.System.Web";\r
-                       \r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "Update";\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       view.ExecuteUpdate (null, null, null);\r
-                       Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName");\r
-               }\r
-\r
-\r
-               //Excpetions\r
-               [Test]  // Note: on ConflictOptions.CompareAllValues old values cannot be null;\r
-               [Category ("NotWorking")]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_UpdateExecute_CompareAllValues_Exception ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "TryUpdate_1";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.UpdateParameters.Add (p1);\r
-                       view.UpdateParameters.Add (p2);\r
-                       view.UpdateParameters.Add (p3);\r
-\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       view.ConflictDetection = ConflictOptions.CompareAllValues;\r
-                       view.ExecuteUpdate (null, null, null);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_UpdateExecute_3 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.UpdateMethod = "Update";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.UpdateParameters.Add (p1);\r
-                       view.UpdateParameters.Add (p2);\r
-                       view.UpdateParameters.Add (p3);\r
-\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "1000");\r
-                       view.ExecuteUpdate (value, null, null);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_InsertParameterException ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.InsertMethod = "Insert";\r
-\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("id", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("lname", TypeCode.String, "chand");\r
-                       view.InsertParameters.Add (p1);\r
-                       view.InsertParameters.Add (p2);\r
-                       view.InsertParameters.Add (p3);\r
-\r
-                       //This hashtable ovveride \r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("z", "test_id");\r
-\r
-                       //Merge parameters\r
-                       view.ExecuteInsert (value);\r
-                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute");\r
-               }\r
-               \r
-               [Test]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_DeleteExecuteMethodParameterException()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.DeleteMethod = "delete";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       view.DeleteParameters.Add (p1);\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "test_id");\r
-                       view.ExecuteDelete (value, null);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_DeleteExecuteOldValueException ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.DeleteMethod = "Delete";\r
-                       Parameter p1, p2, p3;\r
-                       p1 = new Parameter ("ID", TypeCode.String, "1001");\r
-                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");\r
-                       p3 = new Parameter ("LName", TypeCode.String, "chand");\r
-                       view.DeleteParameters.Add (p1);\r
-                       view.DeleteParameters.Add (p2);\r
-                       view.DeleteParameters.Add (p3);\r
-                       view.OldValuesParameterFormatString = "oldvalue_{0}";\r
-\r
-                       Hashtable value = new Hashtable ();\r
-                       value.Add ("ID", "test_id");\r
-                       value.Add ("FName", "test_FName");\r
-                       view.ExecuteDelete (value, null);\r
-                       Assert.AreEqual (true, MyTableObject.DeleteWithOldValueCollection, "DeleteExecute");\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_SelectExecuteException_1 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.SelectMethod = "GetMyData";\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectParameters.Add (new Parameter ("Name", TypeCode.String, "TestSelect"));\r
-                       IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));\r
-               }\r
-\r
-               [ExpectedException (typeof (InvalidOperationException))]\r
-               public void ObjectDataSource_SelectExecuteException_2 ()\r
-               {\r
-                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();\r
-                       InitObjectDataSource (ods, "");\r
-                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);\r
-                       view.SelectMethod = "Fake";\r
-                       view.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject,MonoTests.System.Web";\r
-                       view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));\r
-                       IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));\r
+               }
+
+               [Test]
+               public void ObjectDataSource_SelectExecute ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.SelectMethod = "GetMyData";
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
+                       ArrayList ls =(ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
+                       Assert.AreEqual ("TestSelect", ls[0], "SelectExecute");
+               }
+
+               [Test]
+               public void ObjectDataSource_SelectExecuteCaseSensitive ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.SelectMethod = "GetMyData";
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectParameters.Add (new Parameter ("fname", TypeCode.String, "TestSelect"));
+                       ArrayList ls = (ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
+                       Assert.AreEqual ("TestSelect", ls[0], "SelectExecuteCaseSensitive");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecute ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "Delete";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "p_chand");
+                       view.DeleteParameters.Add (p1);
+                       view.DeleteParameters.Add (p2);
+                       view.DeleteParameters.Add (p3);
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       
+                       Hashtable keys = new Hashtable();
+                       keys.Add("ID","k_test_id");
+                       view.ExecuteDelete (keys, null);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
+                       Assert.AreEqual ("1001, p_Mahesh, p_chand, k_test_id", MyTableObject.UpdatePassedValues, "DeleteExecute Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecuteParameterCaseSensitive_1 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "Delete";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("id", TypeCode.String, "1001");
+                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("lname", TypeCode.String, "chand");
+                       view.DeleteParameters.Add (p1);
+                       view.DeleteParameters.Add (p2);
+                       view.DeleteParameters.Add (p3);
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "test_id");
+                       view.ExecuteDelete (value, null);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteParameterCaseSensitive");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecuteMethodCaseSensitive ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "delete";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.DeleteParameters.Add (p1);
+                       view.DeleteParameters.Add (p2);
+                       view.DeleteParameters.Add (p3);
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "test_id");
+                       view.ExecuteDelete (value, null);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteMethodCaseSensitive");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecuteCompareAllValues () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "DeleteOldValues";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteDelete (keys, old_value);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithOldValuesCompareAllValues, "DeleteExecuteCompareAllValues");
+                       Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteCompareAllValues Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecuteDataType () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "Delete";
+                       view.ConflictDetection = ConflictOptions.OverwriteChanges;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteDelete (keys, old_value);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataType");
+                       Assert.AreEqual ("k_1001, , ", MyTableObject.UpdatePassedValues, "DeleteExecuteDataType Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_DeleteExecuteDataTypeCompareAllValues () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "Delete";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteDelete (keys, old_value);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataTypeCompareAllValues");
+                       Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteDataTypeCompareAllValues Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_InsertExecute_1 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.InsertMethod = "Insert";
+
+                       //This hashtable ovveride 
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "test_id");
+                       view.ExecuteInsert (value);
+                       Assert.AreEqual (true, MyTableObject.InsertWithParameters, "InsertExecute#1");
+               }
+
+               [Test]
+               public void ObjectDataSource_InsertExecute_2 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.InsertMethod = "Insert";
+
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.InsertParameters.Add (p1);
+                       view.InsertParameters.Add (p2);
+                       view.InsertParameters.Add (p3);
+
+                       //This hashtable ovveride 
+                       Hashtable value = new Hashtable ();
+                       value.Add ("T", "test_id");
+
+                       //Merge parameters
+                       view.ExecuteInsert (value);
+                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute#2");
+               }
+
+               [Test]
+               public void ObjectDataSource_InsertParametersCaseSensitive ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.InsertMethod = "Insert";
+
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("id", TypeCode.String, "1001");
+                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("lname", TypeCode.String, "chand");
+                       view.InsertParameters.Add (p1);
+                       view.InsertParameters.Add (p2);
+                       view.InsertParameters.Add (p3);
+
+                       //This hashtable ovveride 
+                       Hashtable value = new Hashtable ();
+                       value.Add ("t", "test_id");
+
+                       //Merge parameters
+                       view.ExecuteInsert (value);
+                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertParametersCaseSensitive");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_1()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "Update";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+                                       
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       Hashtable value = new Hashtable ();
+                       value.Add ("P", "1000");
+                       view.ExecuteUpdate (value, null, null);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithOldValueCollection, "UpdateExecute#1");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_2 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "TryUpdate";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       Hashtable value = new Hashtable ();
+                       value.Add ("P", "1001");
+                       
+                       view.ExecuteUpdate (null, value, null);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithMergedCollection, "UpdateExecute#2");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_CompareAllValues ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "TryUpdate_1";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       
+                       
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "1001");
+
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       view.ExecuteUpdate (null,null, value);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithCompareAllValues, "CompareAllValues");
+               }
+
+               private static void InitializeView (CustomObjectDataSourceView view, out Hashtable keys, out Hashtable old_value, out Hashtable new_value) 
+               {
+                       Parameter p1, p2, p3, p4;
+                       p1 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "p_chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+
+                       p4 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
+                       view.DeleteParameters.Add (p4);
+
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+
+                       keys = new Hashtable ();
+                       keys.Add ("ID", "k_1001");
+
+                       old_value = new Hashtable ();
+                       old_value.Add ("ID", "ov_1001");
+                       old_value.Add ("FName", "ov_Mahesh");
+                       old_value.Add ("LName", "ov_chand");
+
+                       new_value = new Hashtable ();
+                       new_value.Add ("ID", "n_1001");
+                       new_value.Add ("FName", "n_Mahesh");
+                       new_value.Add ("LName", "n_chand");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_CompareAllValues2 () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "UpdateCompareAllValues";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteUpdate (keys, new_value, old_value);
+                       Assert.AreEqual (true, MyTableObject.UpdateCompareAllValuesCalled, "CompareAllValues2");
+                       Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "CompareAllValues2 Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_OverwriteChanges () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "UpdateOverwriteChanges";
+                       view.ConflictDetection = ConflictOptions.OverwriteChanges;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteUpdate (keys, new_value, old_value);
+                       Assert.AreEqual (true, MyTableObject.UpdateOverwriteChangesCalled, "OverwriteChanges");
+                       Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001", MyTableObject.UpdatePassedValues, "OverwriteChanges Values");
+               }
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_DataObjectTypeName ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
+                       
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "Update";
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       view.ExecuteUpdate (null, null, null);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName");
+                       Assert.AreEqual (", , ", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
+               }
+               [Test]
+               public void ObjectDataSource_UpdateExecute_DataObjectTypeName2 () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
+
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "Update";
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       view.ConflictDetection = ConflictOptions.OverwriteChanges;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteUpdate (keys, new_value, old_value);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName2");
+                       Assert.AreEqual ("n_1001, n_Mahesh, n_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
+               }
+
+
+               [Test]
+               public void ObjectDataSource_UpdateExecute_DataObjectTypeNameCompareAllValues () 
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
+
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "Update";
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       Hashtable keys;
+                       Hashtable old_value;
+                       Hashtable new_value;
+                       InitializeView (view, out keys, out old_value, out new_value);
+
+                       view.ExecuteUpdate (keys, new_value, old_value);
+                       Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeNameAllValues, "UpdateExecute_DataObjectTypeNameCompareAllValues");
+                       Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
+               }
+
+               //Excpetions
+               [Test]  // Note: on ConflictOptions.CompareAllValues old values cannot be null;
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_UpdateExecute_CompareAllValues_Exception ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "TryUpdate_1";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       view.ConflictDetection = ConflictOptions.CompareAllValues;
+                       view.ExecuteUpdate (null, null, null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_UpdateExecute_3 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.UpdateMethod = "Update";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.UpdateParameters.Add (p1);
+                       view.UpdateParameters.Add (p2);
+                       view.UpdateParameters.Add (p3);
+
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "1000");
+                       view.ExecuteUpdate (value, null, null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_InsertParameterException ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.InsertMethod = "Insert";
+
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("id", TypeCode.String, "1001");
+                       p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("lname", TypeCode.String, "chand");
+                       view.InsertParameters.Add (p1);
+                       view.InsertParameters.Add (p2);
+                       view.InsertParameters.Add (p3);
+
+                       //This hashtable ovveride 
+                       Hashtable value = new Hashtable ();
+                       value.Add ("z", "test_id");
+
+                       //Merge parameters
+                       view.ExecuteInsert (value);
+                       Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute");
+               }
+               
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_DeleteExecuteMethodParameterException()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "delete";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       view.DeleteParameters.Add (p1);
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "test_id");
+                       view.ExecuteDelete (value, null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_DeleteExecuteOldValueException ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectMethod = "GetMyData";
+                       view.DeleteMethod = "Delete";
+                       Parameter p1, p2, p3;
+                       p1 = new Parameter ("ID", TypeCode.String, "1001");
+                       p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
+                       p3 = new Parameter ("LName", TypeCode.String, "chand");
+                       view.DeleteParameters.Add (p1);
+                       view.DeleteParameters.Add (p2);
+                       view.DeleteParameters.Add (p3);
+                       view.OldValuesParameterFormatString = "oldvalue_{0}";
+
+                       Hashtable value = new Hashtable ();
+                       value.Add ("ID", "test_id");
+                       value.Add ("FName", "test_FName");
+                       view.ExecuteDelete (value, null);
+                       Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_SelectExecuteException_1 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.SelectMethod = "GetMyData";
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectParameters.Add (new Parameter ("Name", TypeCode.String, "TestSelect"));
+                       IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
+               }
+
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ObjectDataSource_SelectExecuteException_2 ()
+               {
+                       ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
+                       InitObjectDataSource (ods, "");
+                       CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
+                       view.SelectMethod = "Fake";
+                       view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
+                       view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
+                       IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
                }
 
                [Test]
@@ -1221,28 +1387,28 @@ namespace MonoTests.System.Web.UI.WebControls
                        ods.FilterExpression  = "ID='1001'";
                        p.Controls.Add (ods);
                        IEnumerable table = (IEnumerable) ods.Select ();
-               }\r
-       }\r
-\r
-       # region Object_Data_Source_DAL\r
+               }
+       }
+
+       # region Object_Data_Source_DAL
        public class MyTableObject 
        {
-               public static DataTable ds = CreateDataTable ();\r
-               public MyTableObject ()\r
-               {\r
-                       ResetEventCheckers ();\r
+               public static DataTable ds = CreateDataTable ();
+               public MyTableObject ()
+               {
+                       ResetEventCheckers ();
                }
                
                public static DataTable GetMyData ()
                {
                        return ds;
-               }\r
-\r
-               public static ArrayList GetMyData (string Fname)\r
-               {\r
-                       ArrayList ar = new ArrayList ();\r
-                       ar.Add (Fname);\r
-                       return ar; \r
+               }
+
+               public static ArrayList GetMyData (string Fname)
+               {
+                       ArrayList ar = new ArrayList ();
+                       ar.Add (Fname);
+                       return ar; 
                }
 
                public static DbDataReader SelectException ()
@@ -1262,35 +1428,62 @@ namespace MonoTests.System.Web.UI.WebControls
                        ds.Rows.Remove (dr);
                        return ds;
 
-               }\r
-\r
-               public static DataTable Delete (string ID, string FName, string LName, string oldvalue_ID)\r
-               {\r
-                       DeleteWithOldValueCollection = true;\r
-                       DataRow dr = ds.Rows.Find (ID);\r
-                       try {\r
-                               ds.Rows.Remove (dr); }\r
-                       catch{}\r
-                       return ds;\r
-               }\r
-\r
-               public static bool DeleteWithOldValueCollection;\r
-               public static bool UpdateWithOldValueCollection;\r
-               public static bool UpdateWithMergedCollection;\r
-               public static bool InsertWithParameters;\r
-               public static bool InsertWithMergedParameters;\r
-               public static bool UpdateWithCompareAllValues;\r
+               }
+
+               public static DataTable Delete (string ID, string FName, string LName, string oldvalue_ID)
+               {
+                       DeleteWithParamsAndKeys = true;
+                       UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
+                       DataRow dr = ds.Rows.Find (ID);
+                       try {
+                               ds.Rows.Remove (dr); }
+                       catch{}
+                       return ds;
+               }
+
+               public static DataTable DeleteOldValues (string oldvalue_ID, string oldvalue_FName, string oldvalue_LName) 
+               {
+                       DeleteWithOldValuesCompareAllValues = true;
+                       UpdatePassedValues = String.Join (", ", new string [] { oldvalue_ID, oldvalue_FName, oldvalue_LName });
+                       return ds;
+               }
+
+               public static DataTable Delete (NewData anyName) 
+               {
+                       UpdatePassedValues = String.Join (", ", new string [] { anyName.ID, anyName.FName, anyName.LName });
+                       DeleteWithDataObjectTypeName = true;
+                       return ds;
+               }
+
+               public static bool DeleteWithParamsAndKeys;
+               public static bool DeleteWithOldValuesCompareAllValues;
+               public static bool DeleteWithDataObjectTypeName;
+               public static bool UpdateWithOldValueCollection;
+               public static bool UpdateWithMergedCollection;
+               public static bool InsertWithParameters;
+               public static bool InsertWithMergedParameters;
+               public static bool UpdateWithCompareAllValues;
                public static bool UpdateWithDataObjectTypeName;
+               public static bool UpdateWithDataObjectTypeNameAllValues;
+               public static bool UpdateCompareAllValuesCalled;
+               public static bool UpdateOverwriteChangesCalled;
+               public static string UpdatePassedValues;
        
                private void ResetEventCheckers()
-               {\r
-                       DeleteWithOldValueCollection = false;\r
-                       InsertWithParameters = false;\r
-                       InsertWithMergedParameters = false;\r
-                       UpdateWithOldValueCollection = false;\r
-                       UpdateWithMergedCollection = false;\r
-                       UpdateWithCompareAllValues = false;\r
+               {
+                       DeleteWithParamsAndKeys = false;
+                       DeleteWithOldValuesCompareAllValues = false;
+                       DeleteWithDataObjectTypeName = false;
+                       InsertWithParameters = false;
+                       InsertWithMergedParameters = false;
+                       UpdateWithOldValueCollection = false;
+                       UpdateWithMergedCollection = false;
+                       UpdateWithCompareAllValues = false;
                        UpdateWithDataObjectTypeName = false;
+                       UpdateWithDataObjectTypeNameAllValues = false;
+                       UpdateCompareAllValuesCalled = false;
+                       UpdateOverwriteChangesCalled = false;
+                       UpdatePassedValues = "";
                }
 
                public static DataTable Update (string ID, string FName, string LName)
@@ -1305,43 +1498,67 @@ namespace MonoTests.System.Web.UI.WebControls
                        dr["LName"] = LName;
                        return ds;
 
-               }\r
-\r
-               public static DataTable TryUpdate_1 (string ID, string FName, string LName, string oldvalue_ID)\r
-               {\r
-                       UpdateWithCompareAllValues = true;\r
-                       return ds;\r
-               }\r
-\r
-               \r
-               public static DataTable TryUpdate (string ID, string FName, string LName, string P)\r
-               {\r
-                       UpdateWithMergedCollection = true;\r
-                       return ds;\r
-               }\r
-\r
-               public static DataTable Update (string ID, string FName, string LName, string oldvalue_P )\r
-               {\r
-                       UpdateWithOldValueCollection = true;\r
-                       return ds;\r
-               }\r
-\r
-               public static DataTable Update (NewData data)\r
-               {\r
-                       UpdateWithDataObjectTypeName = true;\r
-                       return ds;\r
-               }\r
-\r
-               public static DataTable Insert (string ID)\r
-               {\r
-                       InsertWithParameters = true;\r
-                       return ds;\r
-               }\r
-\r
-               public static DataTable Insert (string ID, string FName, string LName,string T)\r
-               {\r
-                       InsertWithMergedParameters = true;\r
-                       return ds;\r
+               }
+
+               public static DataTable TryUpdate_1 (string ID, string FName, string LName, string oldvalue_ID)
+               {
+                       UpdateWithCompareAllValues = true;
+                       return ds;
+               }
+
+               
+               public static DataTable TryUpdate (string ID, string FName, string LName, string P)
+               {
+                       UpdateWithMergedCollection = true;
+                       return ds;
+               }
+
+               public static DataTable Update (string ID, string FName, string LName, string oldvalue_P )
+               {
+                       UpdateWithOldValueCollection = true;
+                       return ds;
+               }
+
+               public static DataTable Update (NewData data)
+               {
+                       UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName});
+                       UpdateWithDataObjectTypeName = true;
+                       return ds;
+               }
+
+               public static DataTable Update (NewData data, NewData oldvalue_data) 
+               {
+                       UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName, oldvalue_data.ID, oldvalue_data.FName, oldvalue_data.LName });
+                       UpdateWithDataObjectTypeNameAllValues = true;
+                       return ds;
+               }
+
+               public static DataTable UpdateCompareAllValues (string ID, string FName, string LName,
+                                                                                                          string oldvalue_ID, string oldvalue_FName, string oldvalue_LName) 
+               {
+                       UpdatePassedValues = String.Join (", ", new string [] {ID, FName, LName, oldvalue_ID, oldvalue_FName, oldvalue_LName });
+                       UpdateCompareAllValuesCalled = true;
+                       return ds;
+               }
+
+               public static DataTable UpdateOverwriteChanges (string ID, string FName, string LName, string oldvalue_ID) 
+               {
+                       UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
+                       UpdateOverwriteChangesCalled = true;
+                       return ds;
+               }
+
+
+               public static DataTable Insert (string ID)
+               {
+                       InsertWithParameters = true;
+                       return ds;
+               }
+
+               public static DataTable Insert (string ID, string FName, string LName,string T)
+               {
+                       InsertWithMergedParameters = true;
+                       return ds;
                }
 
                public static DataTable Insert (string ID, string FName, string LName)
@@ -1436,40 +1653,40 @@ namespace MonoTests.System.Web.UI.WebControls
                                table.Rows.Add (new object[] { "Number" + current.ToString (), current });
                        }
                        return table;
-               }\r
-\r
-\r
-\r
-       }\r
-       #endregion\r
-\r
-       #region DataObjectTypeName\r
-       public class NewData\r
-       {\r
-               private int IDValue;\r
-               private string ENameValue;\r
-               private string LNameValue;\r
-\r
-               public string LName\r
-               {\r
-                       get { return LNameValue; }\r
-                       set { LNameValue = value; }\r
-               }\r
-               \r
-               public string EName\r
-               {\r
-                       get { return ENameValue; }\r
-                       set { ENameValue = value; }\r
-               }\r
-\r
-               public int ID\r
-               {\r
-                       get { return IDValue; }\r
-                       set { IDValue = value; }\r
-               }\r
-\r
-       }\r
-       #endregion\r
-\r
+               }
+
+
+
+       }
+       #endregion
+
+       #region DataObjectTypeName
+       public class NewData
+       {
+               private string IDValue;
+               private string FNameValue;
+               private string LNameValue;
+
+               public string LName
+               {
+                       get { return LNameValue; }
+                       set { LNameValue = value; }
+               }
+               
+               public string FName
+               {
+                       get { return FNameValue; }
+                       set { FNameValue = value; }
+               }
+
+               public string ID
+               {
+                       get { return IDValue; }
+                       set { IDValue = value; }
+               }
+
+       }
+       #endregion
+
 }
 #endif