\r
using System;\r
using System.Data;\r
-using System.Data.Common;
+using System.Data.Common;\r
using System.Data.SqlClient;\r
\r
using NUnit.Framework;\r
\r
-namespace MonoTests.System.Data.SqlClient
-{\r
+namespace MonoTests.System.Data.SqlClient {\r
+ [TestFixture]\r
+ public class SqlCommandTest : MSSqlTestClient {\r
+ [SetUp]\r
+ public void GetReady () {\r
+ OpenConnection ();\r
+ }\r
\r
- [TestFixture]\r
- public class SqlCommandTest : MSSqlTestClient {\r
- \r
- [SetUp]\r
- public void GetReady () {\r
- OpenConnection ();\r
- }\r
+ [TearDown]\r
+ public void Clean () {\r
+ CloseConnection ();\r
+ }\r
\r
- [TearDown]\r
- public void Clean () {\r
- CloseConnection ();\r
- }
-
- /**
- This is required to be run only once, call this from the GetReady.
- **/
- private void setup(){
- string createquery = "CREATE PROCEDURE sp_insert @TestPar1 varchar(50),@BirthDate datetime as insert into Employees(LastName,FirstName) VALUES('SSS','uuuu') ";
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = conn;
- cmd.CommandText = createquery;
- int ret =cmd.ExecuteNonQuery();
- }
-
-
- [Test]\r
- /**
- The below test expects the stored procedure sp_insert in the database.
- **/
- public void ExecuteNonQueryTest () {
- try {
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = conn;
- cmd.CommandText = "sp_insert";
- cmd.CommandType = CommandType.StoredProcedure;
- Object TestPar = System.DBNull.Value;
- cmd.Parameters.Add("@TestPar1",SqlDbType.Int);
- cmd.Parameters["@TestPar1"].Value = TestPar;
- cmd.Parameters.Add("@BirthDate",DateTime.Now);
- Assert.AreEqual(-1,cmd.ExecuteNonQuery());
- }\r
- catch (Exception e) {
- Assert.Fail("A#01 Got an exception");
- Console.WriteLine(e.Message);
- Console.WriteLine(e.StackTrace);
-
- }
-
- finally { // try/catch is necessary to gracefully close connections\r
-
- CloseConnection ();\r
- }\r
- }\r
+ private void CreateInsertEmployeeSP() {\r
+ string createquery = "CREATE PROCEDURE #Insert_Employee @TestPar1 varchar(50),@BirthDate datetime as insert into Employees(LastName,FirstName) VALUES('SSS','uuuu') ";\r
+ SqlCommand cmd = new SqlCommand();\r
+ cmd.Connection = conn;\r
+ cmd.CommandText = createquery;\r
+ cmd.ExecuteNonQuery();\r
+ }\r
+\r
+ private void CreateBug66630SP() {\r
+ SqlCommand cmd = conn.CreateCommand();\r
+ cmd.CommandType = CommandType.Text;\r
+ cmd.CommandText = "CREATE PROCEDURE #Bug66630 (" \r
+ + "@Status smallint = 7"\r
+ + ")"\r
+ + "AS" + Environment.NewLine\r
+ + "BEGIN" + Environment.NewLine\r
+ + "SELECT CAST(5 AS int), @Status" + Environment.NewLine\r
+ + "END";\r
+ cmd.ExecuteNonQuery();\r
+ }\r
+\r
+ [Test]\r
+ public void ExecuteNonQueryTest () {\r
+ // create temp sp here, should normally be created in Setup of test
+ // case, but cannot be done right now because of ug #68978
+ CreateInsertEmployeeSP();
+ try {\r
+ SqlCommand cmd = new SqlCommand();\r
+ cmd.Connection = conn;\r
+ cmd.CommandText = "#Insert_Employee";\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ Object TestPar = System.DBNull.Value;\r
+ cmd.Parameters.Add("@TestPar1", SqlDbType.Int);\r
+ cmd.Parameters["@TestPar1"].Value = TestPar;\r
+ cmd.Parameters.Add("@BirthDate", DateTime.Now);\r
+ Assert.AreEqual(-1,cmd.ExecuteNonQuery());\r
+ } catch (Exception e) {\r
+ Assert.Fail("A#01 Got an exception");\r
+ Console.WriteLine(e.Message);\r
+ Console.WriteLine(e.StackTrace);\r
+ } finally {\r
+ // gracefully close connection\r
+ CloseConnection ();\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Verifies whether an enum value is converted to a numeric value when\r
+ * used as value for a numeric parameter (bug #66630)\r
+ */\r
+ [Test]\r
+ public void EnumParameterTest() {\r
+ // create temp sp here, should normally be created in Setup of test
+ // case, but cannot be done right now because of ug #68978
+ CreateBug66630SP();
- [Test]
- /**
- The below test does not need a connection but since the setup opens the connection
- i will need to close it
- **/
- public void CloneTest() {
-
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = null;
- cmd.CommandText = "sp_insert";
- cmd.CommandType = CommandType.StoredProcedure;
- Object TestPar = System.DBNull.Value;
- cmd.Parameters.Add("@TestPar1",SqlDbType.Int);
- cmd.Parameters["@TestPar1"].Value = TestPar;
- cmd.Parameters.Add("@BirthDate",DateTime.Now);
- cmd.DesignTimeVisible = true;
- cmd.CommandTimeout = 100;
- Object clone1 = ((ICloneable)(cmd)).Clone();
- SqlCommand cmd1 = (SqlCommand)clone1;
- Assert.AreEqual(2,cmd1.Parameters.Count);
- Assert.AreEqual(100,cmd1.CommandTimeout);
- cmd1.Parameters.Add("@test",DateTime.Now);
- // to check that it is deep copy and not a shallow copy of the
- // parameter collection
- Assert.AreEqual(3,cmd1.Parameters.Count);
- Assert.AreEqual(2,cmd.Parameters.Count);
- }
-
-
- }\r
+ SqlCommand cmd = new SqlCommand("#Bug66630", conn);\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.Add("@Status", SqlDbType.Int).Value = Status.Error;\r
+\r
+ using (SqlDataReader dr = cmd.ExecuteReader()) {\r
+ // one record should be returned\r
+ Assert.IsTrue(dr.Read(), "EnumParameterTest#1");\r
+ // we should get two field in the result\r
+ Assert.AreEqual(2, dr.FieldCount, "EnumParameterTest#2");\r
+ // field 1\r
+ Assert.AreEqual("int", dr.GetDataTypeName(0), "EnumParameterTest#3");\r
+ Assert.AreEqual(5, dr.GetInt32(0), "EnumParameterTest#4");\r
+ // field 2\r
+ Assert.AreEqual("smallint", dr.GetDataTypeName(1), "EnumParameterTest#5");\r
+ Assert.AreEqual((short) Status.Error, dr.GetInt16(1), "EnumParameterTest#6");\r
+ // only one record should be returned\r
+ Assert.IsFalse(dr.Read(), "EnumParameterTest#7");\r
+ }\r
+ }\r
+\r
+ [Test]\r
+ /**\r
+ * The below test does not need a connection but since the setup opens \r
+ * the connection i will need to close it\r
+ */\r
+ public void CloneTest() {\r
+ SqlCommand cmd = new SqlCommand();\r
+ cmd.Connection = null;\r
+ cmd.CommandText = "sp_insert";\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ Object TestPar = System.DBNull.Value;\r
+ cmd.Parameters.Add("@TestPar1", SqlDbType.Int);\r
+ cmd.Parameters["@TestPar1"].Value = TestPar;\r
+ cmd.Parameters.Add("@BirthDate", DateTime.Now);\r
+ cmd.DesignTimeVisible = true;\r
+ cmd.CommandTimeout = 100;\r
+ Object clone1 = ((ICloneable)(cmd)).Clone();\r
+ SqlCommand cmd1 = (SqlCommand) clone1;\r
+ Assert.AreEqual(2, cmd1.Parameters.Count);\r
+ Assert.AreEqual(100, cmd1.CommandTimeout);\r
+ cmd1.Parameters.Add("@test", DateTime.Now);\r
+ // to check that it is deep copy and not a shallow copy of the\r
+ // parameter collection\r
+ Assert.AreEqual(3, cmd1.Parameters.Count);\r
+ Assert.AreEqual(2, cmd.Parameters.Count);\r
+ }\r
+\r
+ private enum Status { \r
+ OK = 0,\r
+ Error = 3\r
+ }\r
+ }\r
}\r