List:Commits« Previous MessageNext Message »
From:rburnett Date:November 29 2006 6:45pm
Subject:Connector/NET commit: r470 - in trunk: . TestSuite mysqlclient/core
View as plain text  
Modified:
   trunk/CHANGES
   trunk/TestSuite/ParameterTests.cs
   trunk/mysqlclient/core/parameter.cs
Log:
Bug #24565 Inferring DbType fails when reusing commands and the first time the value is
nul 

This is fixed by not marking the parameter as having it's type set when null is given as
the value.

Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES	2006-11-29 16:53:05 UTC (rev 469)
+++ trunk/CHANGES	2006-11-29 17:45:20 UTC (rev 470)
@@ -3,6 +3,7 @@
   Bugs fixed
   ----------
   Bug #23687 Deleting a connection to a disconnected server causes a failed assertion 
+  Bug #24565 Inferring DbType fails when reusing commands and the first time the value is
nul 
 
   Other changes
   -------------

Modified: trunk/TestSuite/ParameterTests.cs
===================================================================
--- trunk/TestSuite/ParameterTests.cs	2006-11-29 16:53:05 UTC (rev 469)
+++ trunk/TestSuite/ParameterTests.cs	2006-11-29 17:45:20 UTC (rev 470)
@@ -363,5 +363,35 @@
 			Assert.AreEqual(2, dt.Rows.Count);
 			Assert.AreEqual(2, dt.Rows[1]["foo"]);
 		}
-	}
+
+        /// <summary>
+        /// Bug #24565 Inferring DbType fails when reusing commands and the first time
the value is nul 
+        /// </summary>
+        [Test]
+        public void UnTypedParameterBeingReused()
+        {
+            MySqlCommand cmd = new MySqlCommand("INSERT INTO test (id, dt) VALUES (?id,
?dt)", conn);
+            cmd.Parameters.Add("?id", 1);
+            MySqlParameter p = cmd.CreateParameter();
+            p.ParameterName = "?dt";
+            p.Value = DBNull.Value;
+            cmd.Parameters.Add(p);
+            cmd.ExecuteNonQuery();
+
+            cmd.Parameters[0].Value = 2;
+            p.Value = DateTime.Now;
+            cmd.ExecuteNonQuery();
+
+            cmd.CommandText = "SELECT * FROM test";
+            cmd.Parameters.Clear();
+            using (MySqlDataReader reader = cmd.ExecuteReader())
+            {
+                reader.Read();
+                Assert.IsTrue(reader.IsDBNull(2));
+                reader.Read();
+                Assert.IsFalse(reader.IsDBNull(2));
+                Assert.IsFalse(reader.Read());
+            }
+        }
+    }
 }

Modified: trunk/mysqlclient/core/parameter.cs
===================================================================
--- trunk/mysqlclient/core/parameter.cs	2006-11-29 16:53:05 UTC (rev 469)
+++ trunk/mysqlclient/core/parameter.cs	2006-11-29 17:45:20 UTC (rev 470)
@@ -356,7 +356,7 @@
 
 		private void SetMySqlDbType(MySqlDbType mySqlDbType)
 		{
-			this.mySqlDbType = mySqlDbType;
+            this.mySqlDbType = mySqlDbType;
 			switch (mySqlDbType)
 			{
 				case MySqlDbType.Decimal: dbType = DbType.Decimal; break;
@@ -393,7 +393,7 @@
 
 		private void SetDbType(DbType dbType)
 		{
-			this.dbType = dbType;
+            this.dbType = dbType;
 			switch (dbType)
 			{
 				case DbType.Guid:
@@ -440,7 +440,7 @@
 
 		private void SetTypeFromValue()
 		{
-			if (paramValue == null) return;
+            if (paramValue == null || paramValue == DBNull.Value) return;
 
 			if (paramValue is Guid)
 				DbType = DbType.String;

Thread
Connector/NET commit: r470 - in trunk: . TestSuite mysqlclient/corerburnett29 Nov