[Mono-bugs] [Bug 55162][Blo] Changed - SqlParameter value set to null will not result in NULL in query.
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Tue, 30 Mar 2004 15:11:09 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by frans@sd.nl.
http://bugzilla.ximian.com/show_bug.cgi?id=55162
--- shadow/55162 2004-03-30 11:27:50.000000000 -0500
+++ shadow/55162.tmp.7651 2004-03-30 15:11:09.000000000 -0500
@@ -46,6 +46,31 @@
the value null is required to signal NULL. This works in the .NET sqlserver
client and the Oracle ODP.NET client without a problem. If this doesn't
work on Mono, it will make porting code to Mono harder.
------- Additional Comments From lluis@ximian.com 2004-03-30 11:27 -------
Can you post a simple test case? It would be of great help.
+
+------- Additional Comments From frans@sd.nl 2004-03-30 15:11 -------
+ object valueInField = dataSource[columnOrdinal];
+#if MONO
+ bool isColumnValueDBNull = dataSource.IsDBNull(columnOrdinal);
+#else
+ bool isColumnValueDBNull = (dataSource[columnOrdinal] ==
+System.DBNull.Value);
+#endif
+ rowDestination[i].IsNull = isColumnValueDBNull;
+
+dataSource is a SqlDataReader object, open, and it points to a current
+row. Per row I read the fields and store them in individual field
+objects. The code above shows a conditional compile statement I had to
+ add to make it work at runtime. The #else branche works on .NET 1.1,
+the #if MONO branche works on Mono (and .NET 1.1). Because IsDBNull is
+very slow on .NET 1.1, I use the much faster compare statement as
+shown in the #else branche. The #else branche code works with ODP.NET
+and SqlClient, I assume it's standard to store System.DBNull.Value as
+the value for the field if that field is NULL in the database.
+
+As I can't debug the mono code, I can't check what's in the datareader
+field at the ordinal specified, I assume 'null'. Other people have
+confirmed me that the postgresql provider for mono does store
+System.DBNull.Value as the field's value if a field is NULL.