Author: suresh
Date: 2005-03-24 00:18:34 -0500 (Thu, 24 Mar 2005)
New Revision: 42186

Modified:
   trunk/mcs/class/System.Data/System.Data.Common/ChangeLog
   trunk/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs
Log:
2005-03-23  Sureshkumar T  <[EMAIL PROTECTED]>

        * DbDataAdapter.cs: For Update, disable ReadOnly constraint
        temporarily before updating the row. Info from Ingo Bauersachs.
        SkipAllRemainingRows should also skip current row (msdn).



Modified: trunk/mcs/class/System.Data/System.Data.Common/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/System.Data.Common/ChangeLog    2005-03-24 
04:32:49 UTC (rev 42185)
+++ trunk/mcs/class/System.Data/System.Data.Common/ChangeLog    2005-03-24 
05:18:34 UTC (rev 42186)
@@ -1,3 +1,9 @@
+2005-03-23  Sureshkumar T  <[EMAIL PROTECTED]>
+
+       * DbDataAdapter.cs: For Update, disable ReadOnly constraint
+       temporarily before updating the row. Info from Ingo Bauersachs.
+       SkipAllRemainingRows should also skip current row (msdn).
+
 2005-03-22  Sureshkumar T  <[EMAIL PROTECTED]>
 
        * DbDataAdapter.cs: Update (): update the rows based on the

Modified: trunk/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs
===================================================================
--- trunk/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs     
2005-03-24 04:32:49 UTC (rev 42185)
+++ trunk/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs     
2005-03-24 05:18:34 UTC (rev 42186)
@@ -777,9 +777,21 @@
                                                                 if 
(columnMappings != null &&
                                                                     
columnMappings.Contains(columnName))
                                                                         
dstColumnName = columnMappings [dstColumnName].DataSetColumn;
+                                                                DataColumn 
dstColumn = row.Table.Columns [dstColumnName];
+                                                                if (dstColumn 
== null
+                                                                    || 
(dstColumn.Expression != null
+                                                                    && 
dstColumn.Expression.Length > 0))
+                                                                        
continue;
+                                                                // info from : 
http://www.error-bank.com/microsoft.public.dotnet.framework.windowsforms.databinding/
+                                                                // [EMAIL 
PROTECTED]
+                                                                // disable 
readonly for non-expression columns.
+                                                                bool 
readOnlyState = dstColumn.ReadOnly;
+                                                                
dstColumn.ReadOnly = false;
                                                                 try {
                                                                         row 
[dstColumnName] = reader [columnName];
-                                                                }catch 
(Exception) {} // column is not available here
+                                                                } finally {
+                                                                        
dstColumn.ReadOnly = readOnlyState;
+                                                                }
                                                         
                                                         }
                                                 }
@@ -798,7 +810,6 @@
                                             command.UpdatedRowSource == 
UpdateRowSource.OutputParameters) {
                                                 // Update output parameters to 
row values
                                                 foreach (IDataParameter 
parameter in command.Parameters) {
-
                                                         if 
(parameter.Direction != ParameterDirection.InputOutput
                                                             && 
parameter.Direction != ParameterDirection.Output
                                                             && 
parameter.Direction != ParameterDirection.ReturnValue)
@@ -808,7 +819,19 @@
                                                         if (columnMappings != 
null &&
                                                             
columnMappings.Contains(parameter.SourceColumn))
                                                                 dsColumnName = 
columnMappings [parameter.SourceColumn].DataSetColumn;
-                                                        row [dsColumnName] = 
parameter.Value;
+                                                        DataColumn dstColumn = 
row.Table.Columns [dsColumnName];
+                                                        if (dstColumn == null
+                                                            || 
(dstColumn.Expression != null 
+                                                            && 
dstColumn.Expression.Length > 0))
+                                                                continue;
+                                                        bool readOnlyState = 
dstColumn.ReadOnly;
+                                                        dstColumn.ReadOnly  = 
false;
+                                                        try {
+                                                                row 
[dsColumnName] = parameter.Value;
+                                                        } finally {
+                                                                
dstColumn.ReadOnly = readOnlyState;
+                                                        }
+                                                        
                                                 }
                                         }
                                         
@@ -817,14 +840,12 @@
                                         OnRowUpdated(updatedArgs);
                                         switch(updatedArgs.Status) {
                                         case UpdateStatus.Continue:
-                                                row.AcceptChanges();
                                                 break;
                                         case UpdateStatus.ErrorsOccurred:
                                                 throw(updatedArgs.Errors);
                                         case UpdateStatus.SkipCurrentRow:
                                                 continue;
                                         case UpdateStatus.SkipAllRemainingRows:
-                                                row.AcceptChanges ();
                                                 return updateCount;
                                         }
                                        row.AcceptChanges ();

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to