using NUnit.Framework;
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
{
[TestFixture]
[Category ("sqlserver")]
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rdr;
+ EngineConfig engine;
[SetUp]
public void SetUp ()
{
- conn = (SqlConnection) ConnectionManager.Singleton.Connection;
- ConnectionManager.Singleton.OpenConnection ();
+ conn = ConnectionManager.Instance.Sql.Connection;
+ engine = ConnectionManager.Instance.Sql.EngineConfig;
}
[TearDown]
cmd.Dispose ();
if (rdr != null)
rdr.Close ();
- ConnectionManager.Singleton.CloseConnection ();
+ ConnectionManager.Instance.Close ();
}
[Test] // bug #324840
+ [Category("NotWorking")]
public void ParameterSizeTest ()
{
+ if (ClientVersion == 7)
+ Assert.Ignore ("Hangs on SQL Server 7.0");
+
string longstring = new String('x', 20480);
SqlParameter prm;
cmd = new SqlCommand ("create table #text1 (ID int not null, Val1 ntext)", conn);
}
[Test] // bug #382635
+ [Category("NotWorking")]
public void ParameterSize_compatibility_Test ()
{
string longstring = "abcdefghijklmnopqrstuvwxyz";
rdr = selectCmd.ExecuteReader ();
Assert.IsTrue (rdr.Read (), "#C1");
- Assert.AreEqual (20, rdr.GetValue (0), "#C2");
- Assert.AreEqual (longstring.Substring (0, 20), rdr.GetValue (1), "#C3");
+ Assert.AreEqual (14, rdr.GetValue (0), "#C2");
+ Assert.AreEqual (longstring.Substring (0, 14), rdr.GetValue (1), "#C3");
rdr.Close ();
}
}
}
- [Test] // bug# 382589
- public void DecimalMaxAsParamValueTest ()
+ [Test] // bug #382589
+ public void DecimalMaxAsParamValueTest ()
{
- string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,0) OUT)"
- + "AS " + Environment.NewLine
- + "BEGIN" + Environment.NewLine
- + "SET @decmax = 102.34" + Environment.NewLine
- + "END";
+ if (ClientVersion == 7)
+ Assert.Ignore ("Maximum precision is 28.");
- cmd = new SqlCommand (create_sp, conn);
- cmd.ExecuteNonQuery ();
+ string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,0) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "SET @decmax = 102.34" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_sp, conn);
+ cmd.ExecuteNonQuery ();
- cmd.CommandText = "[#sp_bug382539]";
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter pValue = new SqlParameter("@decmax", Decimal.MaxValue);
- pValue.Direction = ParameterDirection.InputOutput;
- cmd.Parameters.Add(pValue);
+ cmd.CommandText = "[#sp_bug382539]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decmax", Decimal.MaxValue);
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
- Assert.AreEqual (Decimal.MaxValue, pValue.Value, "Parameter initialization value mismatch");
- cmd.ExecuteNonQuery();
+ Assert.AreEqual (Decimal.MaxValue, pValue.Value, "Parameter initialization value mismatch");
+ cmd.ExecuteNonQuery();
- Assert.AreEqual (102m, pValue.Value, "Parameter value mismatch");
+ Assert.AreEqual (102m, pValue.Value, "Parameter value mismatch");
}
- [Test] // bug# 382589
- public void DecimalMinAsParamValueTest ()
+ [Test] // bug #382589
+ public void DecimalMinAsParamValueTest ()
{
- string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,0) OUT)"
- + "AS " + Environment.NewLine
- + "BEGIN" + Environment.NewLine
- + "SET @decmax = 102.34" + Environment.NewLine
- + "END";
-
- cmd = new SqlCommand (create_sp, conn);
- cmd.ExecuteNonQuery ();
-
- cmd.CommandText = "[#sp_bug382539]";
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter pValue = new SqlParameter("@decmax", Decimal.MinValue);
- pValue.Direction = ParameterDirection.InputOutput;
- cmd.Parameters.Add(pValue);
-
- Assert.AreEqual (Decimal.MinValue, pValue.Value, "Parameter initialization value mismatch");
- cmd.ExecuteNonQuery();
-
- Assert.AreEqual (102m, pValue.Value, "Parameter value mismatch");
+ if (ClientVersion == 7)
+ Assert.Ignore ("Maximum precision is 28.");
+
+ string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,0) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "SET @decmax = 102.34" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_sp, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug382539]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decmax", Decimal.MinValue);
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+
+ Assert.AreEqual (Decimal.MinValue, pValue.Value, "Parameter initialization value mismatch");
+ cmd.ExecuteNonQuery();
+
+ Assert.AreEqual (102m, pValue.Value, "Parameter value mismatch");
}
- [Test] // bug# 382589
- [ExpectedException (typeof (SqlException))]
- public void DecimalMaxAsParamValueExceptionTest ()
+ [Test] // bug #382589
+ public void DecimalMaxAsParamValueExceptionTest ()
{
- string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,10) OUT)"
- + "AS " + Environment.NewLine
- + "BEGIN" + Environment.NewLine
- + "SET @decmax = 102.36" + Environment.NewLine
- + "END";
-
- cmd = new SqlCommand (create_sp, conn);
- cmd.ExecuteNonQuery ();
-
- cmd.CommandText = "[#sp_bug382539]";
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter pValue = new SqlParameter("@decmax", Decimal.MaxValue);
- pValue.Direction = ParameterDirection.InputOutput;
- cmd.Parameters.Add(pValue);
- cmd.ExecuteNonQuery();
- Assert.Fail ("Expected exception didn't occur");
+ if (ClientVersion == 7)
+ Assert.Ignore ("Maximum precision is 28.");
+
+ string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,10) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "SET @decmax = 102.36" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_sp, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug382539]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decmax", Decimal.MaxValue);
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+
+ try {
+ cmd.ExecuteNonQuery ();
+ Assert.Fail ("#1");
+ } catch (SqlException ex) {
+ // Error converting data type numeric to decimal
+ Assert.AreEqual (typeof (SqlException), ex.GetType (), "#2");
+ Assert.AreEqual ((byte) 16, ex.Class, "#3");
+ Assert.IsNull (ex.InnerException, "#4");
+ Assert.IsNotNull (ex.Message, "#5");
+ Assert.AreEqual (8114, ex.Number, "#6");
+ Assert.AreEqual ((byte) 5, ex.State, "#7");
+ }
}
[Test] // bug# 382589
- [ExpectedException (typeof (SqlException))]
- public void DecimalMinAsParamValueExceptionTest ()
+ public void DecimalMinAsParamValueExceptionTest ()
+ {
+ if (ClientVersion == 7)
+ Assert.Ignore ("Maximum precision is 28.");
+
+ string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,10) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "SET @decmax = 102.36" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_sp, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug382539]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decmax", Decimal.MinValue);
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+ try {
+ cmd.ExecuteNonQuery ();
+ Assert.Fail ("#1");
+ } catch (SqlException ex) {
+ // Error converting data type numeric to decimal
+ Assert.AreEqual (typeof (SqlException), ex.GetType (), "#2");
+ Assert.AreEqual ((byte) 16, ex.Class, "#3");
+ Assert.IsNull (ex.InnerException, "#4");
+ Assert.IsNotNull (ex.Message, "#5");
+ Assert.AreEqual (8114, ex.Number, "#6");
+ Assert.AreEqual ((byte) 5, ex.State, "#7");
+ }
+ }
+
+ [Test] // bug #526794
+ public void ZeroLengthString ()
{
- string create_sp = "CREATE PROCEDURE #sp_bug382539 (@decmax decimal(29,10) OUT)"
- + "AS " + Environment.NewLine
- + "BEGIN" + Environment.NewLine
- + "SET @decmax = 102.36" + Environment.NewLine
- + "END";
-
- cmd = new SqlCommand (create_sp, conn);
- cmd.ExecuteNonQuery ();
-
- cmd.CommandText = "[#sp_bug382539]";
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter pValue = new SqlParameter("@decmax", Decimal.MinValue);
- pValue.Direction = ParameterDirection.InputOutput;
- cmd.Parameters.Add(pValue);
- cmd.ExecuteNonQuery();
- Assert.Fail ("Expected exception didn't occur");
+ cmd = new SqlCommand ("create table #bug526794 (name varchar(20) NULL)", conn);
+ cmd.ExecuteNonQuery ();
+
+ SqlParameter param;
+
+ param = new SqlParameter ("@name", SqlDbType.VarChar);
+ param.Value = string.Empty;
+
+ cmd = new SqlCommand ("insert into #bug526794 values (@name)", conn);
+ cmd.Parameters.Add (param);
+ cmd.ExecuteNonQuery ();
+
+ cmd = new SqlCommand ("select * from #bug526794", conn);
+ rdr = cmd.ExecuteReader ();
+ Assert.IsTrue (rdr.Read (), "#A1");
+ Assert.AreEqual (string.Empty, rdr.GetValue (0), "#A2");
+ rdr.Close ();
+
+ param = new SqlParameter ("@name", SqlDbType.Int);
+ param.Value = string.Empty;
+
+ cmd = new SqlCommand ("insert into #bug526794 values (@name)", conn);
+ cmd.Parameters.Add (param);
+
+ try {
+ cmd.ExecuteNonQuery ();
+ Assert.Fail ("#B1");
+ } catch (FormatException ex) {
+ // Failed to convert parameter value from a String to a Int32
+ Assert.AreEqual (typeof (FormatException), ex.GetType (), "#B2");
+ Assert.IsNotNull (ex.Message, "#B3");
+ Assert.IsTrue (ex.Message.IndexOf (typeof (string).Name) != -1, "#B4");
+ Assert.IsTrue (ex.Message.IndexOf (typeof (int).Name) != -1, "#B5");
+
+ // Input string was not in a correct format
+ Exception inner = ex.InnerException;
+ Assert.IsNotNull (inner, "#B6");
+ Assert.AreEqual (typeof (FormatException), inner.GetType (), "#B7");
+ Assert.IsNull (inner.InnerException, "#B8");
+ Assert.IsNotNull (inner.Message, "#B9");
+ }
+ }
+
+ [Test] // bug #595918
+ public void DecimalDefaultScaleTest ()
+ {
+ string create_tbl = "CREATE TABLE #decimalScaleCheck (decsclcheck DECIMAL (19, 5) null)";
+ string create_sp = "CREATE PROCEDURE #sp_bug595918(@decsclcheck decimal(19,5) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "INSERT INTO #decimalScaleCheck values (@decsclcheck)" + Environment.NewLine
+ + "SELECT @decsclcheck=decsclcheck from #decimalScaleCheck" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_tbl, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = create_sp;
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug595918]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decsclcheck", SqlDbType.Decimal);
+ pValue.Value = 128.425;
+ pValue.Precision = 19;
+ pValue.Scale = 3;
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+ cmd.ExecuteNonQuery();
+
+ Assert.AreEqual (128.425, pValue.Value, "Stored decimal value is incorrect - DS - Bug#595918");
+ }
+
+ [Test] // bug #595918
+ public void DecimalGreaterScaleTest ()
+ {
+ string create_tbl = "CREATE TABLE #decimalScaleCheck (decsclcheck DECIMAL (19, 5) null)";
+ string create_sp = "CREATE PROCEDURE #sp_bug595918(@decsclcheck decimal(19,5) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "INSERT INTO #decimalScaleCheck values (@decsclcheck)" + Environment.NewLine
+ + "SELECT @decsclcheck=decsclcheck from #decimalScaleCheck" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_tbl, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = create_sp;
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug595918]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decsclcheck", SqlDbType.Decimal);
+ pValue.Value = 128.425;
+ pValue.Precision = 19;
+ pValue.Scale = 5;
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+ cmd.ExecuteNonQuery();
+
+ Assert.AreEqual (128.42500, pValue.Value, "Stored decimal value is incorrect - GS - Bug#595918");
}
+ [Test] // bug #595918
+ public void DecimalLesserScaleTest ()
+ {
+ string create_tbl = "CREATE TABLE #decimalScaleCheck (decsclcheck DECIMAL (19, 5) null)";
+ string create_sp = "CREATE PROCEDURE #sp_bug595918(@decsclcheck decimal(19,5) OUT)"
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "INSERT INTO #decimalScaleCheck values (@decsclcheck)" + Environment.NewLine
+ + "SELECT @decsclcheck=decsclcheck from #decimalScaleCheck" + Environment.NewLine
+ + "END";
+
+ cmd = new SqlCommand (create_tbl, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = create_sp;
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "[#sp_bug595918]";
+ cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter pValue = new SqlParameter("@decsclcheck", SqlDbType.Decimal);
+ pValue.Value = 128.425;
+ pValue.Precision = 19;
+ pValue.Scale = 2;
+ pValue.Direction = ParameterDirection.InputOutput;
+ cmd.Parameters.Add(pValue);
+ cmd.ExecuteNonQuery();
+
+ Assert.AreEqual (128.42, pValue.Value, "Stored decimal value is incorrect - LS - Bug#595918");
+ }
+
+ int ClientVersion {
+ get {
+ return (engine.ClientVersion);
+ }
+ }
}
}