// Author:
// Senganal T (tsenganal@novell.com)
// Amit Biswas (amit@amitbiswas.com)
+// Veerapuram Varadhan (vvaradhan@novell.com)
//
// Copyright (c) 2004 Novell Inc., and the individuals listed
// on the ChangeLog entries.
using System;
using System.Data;
-using System.Data.Common;
using System.Data.SqlClient;
-using System.Data.SqlTypes;
using NUnit.Framework;
-namespace MonoTests.System.Data.SqlClient
+namespace MonoTests.System.Data.Connected.SqlClient
{
[TestFixture]
[Category ("sqlserver")]
- //FIXME : Add more testcases
public class SqlParameterTest
{
- //testcase for #77410
- [Test]
- public void ParameterNullTest ()
- {
- SqlParameter param = new SqlParameter ("param", SqlDbType.Decimal);
- Assert.AreEqual (0, param.Scale, "#1");
- param.Value = DBNull.Value;
- Assert.AreEqual (0, param.Scale, "#2");
-
- param = new SqlParameter ("param", SqlDbType.Int);
- Assert.AreEqual (0, param.Scale, "#3");
- param.Value = DBNull.Value;
- Assert.AreEqual (0, param.Scale, "#4");
- }
+ SqlConnection conn;
+ SqlCommand cmd;
+ SqlDataReader rdr;
+ EngineConfig engine;
- [Test]
- public void ParameterType ()
+ [SetUp]
+ public void SetUp ()
{
- // If Type is not set, then type is inferred from the value
- // assigned. The Type should be inferred everytime Value is assigned
- // If value is null or DBNull, then the current Type should be reset to NVarChar.
- SqlParameter param = new SqlParameter ();
- Assert.AreEqual (SqlDbType.NVarChar, param.SqlDbType, "#1");
- param.Value = DBNull.Value;
- Assert.AreEqual (SqlDbType.NVarChar, param.SqlDbType, "#2");
- param.Value = 1;
- Assert.AreEqual (SqlDbType.Int, param.SqlDbType, "#3");
- param.Value = DBNull.Value;
- Assert.AreEqual (SqlDbType.NVarChar, param.SqlDbType, "#4");
- param.Value = null;
- Assert.AreEqual (SqlDbType.NVarChar, param.SqlDbType, "#5");
-
- //If Type is set, then the Type should not inferred from the value
- //assigned.
- SqlParameter param1 = new SqlParameter ();
- param1.DbType = DbType.String;
- Assert.AreEqual (SqlDbType.NVarChar, param1.SqlDbType, "#6");
- param1.Value = 1;
- Assert.AreEqual (SqlDbType.NVarChar, param1.SqlDbType, "#7");
-
- SqlParameter param2 = new SqlParameter ();
- param2.SqlDbType = SqlDbType.NVarChar;
- Assert.AreEqual (SqlDbType.NVarChar, param2.SqlDbType, "#8");
- param2.Value = 1;
- Assert.AreEqual (SqlDbType.NVarChar, param2.SqlDbType, "#9");
+ conn = ConnectionManager.Instance.Sql.Connection;
+ engine = ConnectionManager.Instance.Sql.EngineConfig;
}
- [Test]
- public void SqlDbTypeTest ()
+ [TearDown]
+ public void TearDown ()
{
- SqlParameter p1 = new SqlParameter ();
- Assert.AreEqual (null, p1.Value, "#1 Value of the parameter must be null by default");
- Assert.AreEqual (SqlDbType.NVarChar, p1.SqlDbType, "#2 parameters without any value or null value must have SqlDbtype as NVarChar");
- Assert.AreEqual (DbType.String, p1.DbType, "#3 parameters without any value must have DbType as NVarChar");
-
- SqlParameter p2 = new SqlParameter ("#4 p2Name", (Object)null);
- Assert.AreEqual (null, p2.Value, "#5 Value of the parameter must be null by default");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#6 parameters without any value or null value must have SqlDbtype as NVarChar");
- Assert.AreEqual (DbType.String, p2.DbType, "#7parameters without any value or null value must have DbType as String");
-
- p2.Value = Convert.ToInt32(42);
- Assert.AreEqual (42, p2.Value, "#8 Value of the parameter must be 42");
- Assert.AreEqual (SqlDbType.Int, p2.SqlDbType, "#9 parameter must have SqlDbtype as Int");
- Assert.AreEqual (DbType.Int32, p2.DbType, "#10 parameter must have Dbtype as Int32");
-
- p2.Value = DBNull.Value;
- Assert.AreEqual (DBNull.Value, p2.Value, "#11 Value of the parameter must be DBNull.Value");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#12 parameters without any value or null value must have SqlDbtype as NVarChar");
- Assert.AreEqual (DbType.String, p2.DbType, "#13 parameters without any value or null value must have DbType as String");
-
+ if (cmd != null)
+ cmd.Dispose ();
+ if (rdr != null)
+ rdr.Close ();
+ ConnectionManager.Instance.Close ();
}
- //testcase for #82170
- [Test]
+ [Test] // bug #324840
+ [Category("NotWorking")]
public void ParameterSizeTest ()
{
- SqlConnection conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
- conn.Open ();
+ if (ClientVersion == 7)
+ Assert.Ignore ("Hangs on SQL Server 7.0");
+
string longstring = new String('x', 20480);
- SqlCommand cmd;
SqlParameter prm;
cmd = new SqlCommand ("create table #text1 (ID int not null, Val1 ntext)", conn);
cmd.ExecuteNonQuery ();
cmd.ExecuteNonQuery ();
conn.Close ();
}
-#if NET_2_0
- [Test]
- public void ResetSqlDbTypeTest ()
- {
- //Parameter with an assigned value but no SqlDbType specified
- SqlParameter p1 = new SqlParameter ("foo", 42);
- Assert.AreEqual (42, p1.Value, "#1");
- Assert.AreEqual (DbType.Int32, p1.DbType, "#2");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#3");
-
- p1.ResetSqlDbType ();
- Assert.AreEqual (DbType.Int32, p1.DbType, "#4 The parameter with value 42 must have DbType as Int32");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#5 The parameter with value 42 must have SqlDbType as Int");
-
- p1.SqlDbType = SqlDbType.DateTime; //assigning a SqlDbType
- Assert.AreEqual (DbType.DateTime, p1.DbType, "#6");
- Assert.AreEqual (SqlDbType.DateTime, p1.SqlDbType, "#7");
- p1.ResetSqlDbType (); //Resetting SqlDbType
- Assert.AreEqual (DbType.Int32, p1.DbType, "#8 Resetting SqlDbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#9 Resetting SqlDbType must infer the type from the value");
-
- //Parameter with an assigned SqlDbType but no specified value
- SqlParameter p2 = new SqlParameter ("foo", SqlDbType.Int);
- Assert.AreEqual (null, p2.Value, "#10");
- Assert.AreEqual (DbType.Int32, p2.DbType, "#11");
- Assert.AreEqual (SqlDbType.Int, p2.SqlDbType, "#12");
-
- //Although a SqlDbType is specified, calling ResetSqlDbType resets
- //the SqlDbType and DbType properties to default values
- p2.ResetSqlDbType ();
- Assert.AreEqual (DbType.String, p2.DbType, "#13 Resetting SqlDbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#14 Resetting SqlDbType must infer the type from the value");
-
- p2.SqlDbType = SqlDbType.DateTime; //assigning a SqlDbType
- Assert.AreEqual (DbType.DateTime, p2.DbType, "#15");
- Assert.AreEqual (SqlDbType.DateTime, p2.SqlDbType, "#16");
- p2.ResetSqlDbType (); //Resetting SqlDbType
- Assert.AreEqual (DbType.String, p2.DbType, "#17 Resetting SqlDbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#18 Resetting SqlDbType must infer the type from the value");
- }
- [Test]
- public void ResetDbTypeTest ()
+ [Test] // bug #382635
+ [Category("NotWorking")]
+ public void ParameterSize_compatibility_Test ()
{
- //Parameter with an assigned value but no DbType specified
- SqlParameter p1 = new SqlParameter ("foo", 42);
- Assert.AreEqual (42, p1.Value, "#1");
- Assert.AreEqual (DbType.Int32, p1.DbType, "#2");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#3");
-
- p1.ResetDbType ();
- Assert.AreEqual (DbType.Int32, p1.DbType, "#4 The parameter with value 42 must have DbType as Int32");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#5 The parameter with value 42 must have SqlDbType as Int32");
-
- p1.DbType = DbType.DateTime; //assigning a DbType
- Assert.AreEqual (DbType.DateTime, p1.DbType, "#6");
- Assert.AreEqual (SqlDbType.DateTime, p1.SqlDbType, "#7");
- p1.ResetDbType (); //Resetting DbType
- Assert.AreEqual (DbType.Int32, p1.DbType, "#8 Resetting DbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.Int, p1.SqlDbType, "#9 Resetting DbType must infer the type from the value");
-
- //Parameter with an assigned SqlDbType but no specified value
- SqlParameter p2 = new SqlParameter ("foo", SqlDbType.Int);
- Assert.AreEqual (null, p2.Value, "#10");
- Assert.AreEqual (DbType.Int32, p2.DbType, "#11");
- Assert.AreEqual (SqlDbType.Int, p2.SqlDbType, "#12");
-
- //Although a SqlDbType is specified, calling ResetDbType resets
- //the SqlDbType and DbType properties to default values
- p2.ResetDbType ();
- Assert.AreEqual (DbType.String, p2.DbType, "#13 Resetting DbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#14 Resetting DbType must infer the type from the value");
-
- p2.DbType = DbType.DateTime; //assigning a SqlDbType
- Assert.AreEqual (DbType.DateTime, p2.DbType, "#15");
- Assert.AreEqual (SqlDbType.DateTime, p2.SqlDbType, "#16");
- p2.ResetDbType (); //Resetting DbType
- Assert.AreEqual (DbType.String, p2.DbType, "#17 Resetting DbType must infer the type from the value");
- Assert.AreEqual (SqlDbType.NVarChar, p2.SqlDbType, "#18 Resetting DbType must infer the type from the value");
- }
+ string longstring = "abcdefghijklmnopqrstuvwxyz";
- [Test]
- public void XmlSchemaTest ()
- {
- SqlParameter p1 = new SqlParameter ();
-
- //Testing default values
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionDatabase,
- "#1 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionName,
- "#2 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionOwningSchema,
- "#3 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- //Changing one property should not affect the remaining two properties
- p1.XmlSchemaCollectionDatabase = "database";
- Assert.AreEqual ("database", p1.XmlSchemaCollectionDatabase,
- "#4 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionName,
- "#5 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionOwningSchema,
- "#6 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- p1.XmlSchemaCollectionName = "name";
- Assert.AreEqual ("database", p1.XmlSchemaCollectionDatabase,
- "#7 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual ("name", p1.XmlSchemaCollectionName,
- "#8 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionOwningSchema,
- "#9 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- p1.XmlSchemaCollectionOwningSchema = "schema";
- Assert.AreEqual ("database", p1.XmlSchemaCollectionDatabase,
- "#10 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual ("name", p1.XmlSchemaCollectionName,
- "#11 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual ("schema", p1.XmlSchemaCollectionOwningSchema,
- "#12 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- //assigning null value stores default empty string
- p1.XmlSchemaCollectionDatabase = null;
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionDatabase,
- "#13 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual ("name", p1.XmlSchemaCollectionName,
- "#14 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual ("schema", p1.XmlSchemaCollectionOwningSchema,
- "#15 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- p1.XmlSchemaCollectionName = "";
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionDatabase,
- "#16 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual ("", p1.XmlSchemaCollectionName,
- "#17 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual ("schema", p1.XmlSchemaCollectionOwningSchema,
- "#18 Default value for XmlSchemaCollectionOwningSchema is an empty string");
-
- //values are not trimmed
- p1.XmlSchemaCollectionOwningSchema = " a ";
- Assert.AreEqual (String.Empty, p1.XmlSchemaCollectionDatabase,
- "#19 Default value for XmlSchemaCollectionDatabase is an empty string");
- Assert.AreEqual ("", p1.XmlSchemaCollectionName,
- "#20 Default value for XmlSchemaCollectionName is an empty string");
- Assert.AreEqual (" a ", p1.XmlSchemaCollectionOwningSchema,
- "#21 Default value for XmlSchemaCollectionOwningSchema is an empty string");
- }
+ cmd = new SqlCommand ("create table #bug382635 (description varchar(20))", conn);
+ cmd.ExecuteNonQuery ();
- [Test]
- public void SourceColumnNullMappingTest ()
- {
- SqlParameter p1 = new SqlParameter ();
- Assert.AreEqual (false, p1.SourceColumnNullMapping, "#1 SourceColumnNullMapping should be false by default");
- p1.SourceColumnNullMapping = true;
- Assert.AreEqual (true, p1.SourceColumnNullMapping, "#2 SourceColumnNullMapping should be false by default");
- }
+ cmd.CommandText =
+ "CREATE PROCEDURE #sp_bug382635 (@Desc varchar(20)) "
+ + "AS " + Environment.NewLine
+ + "BEGIN" + Environment.NewLine
+ + "UPDATE #bug382635 SET description = @Desc" + Environment.NewLine
+ + "END";
+ cmd.CommandType = CommandType.Text;
+ cmd.ExecuteNonQuery ();
- [Test]
- public void ctor7Test ()
- {
- SqlParameter p1 = new SqlParameter ("p1Name", SqlDbType.VarChar, 20,
- ParameterDirection.InputOutput, 0, 0,
- "srcCol", DataRowVersion.Original, false,
- "foo", "database", "schema", "name");
- Assert.AreEqual (DbType.AnsiString, p1.DbType, "#");
- Assert.AreEqual (ParameterDirection.InputOutput, p1.Direction, "#");
- Assert.AreEqual (false, p1.IsNullable, "#");
- //Assert.AreEqual (999, p1.LocaleId, "#");
- Assert.AreEqual ("p1Name", p1.ParameterName, "#");
- Assert.AreEqual (0, p1.Precision, "#");
- Assert.AreEqual (0, p1.Scale, "#");
- Assert.AreEqual (20, p1.Size, "#");
- Assert.AreEqual ("srcCol", p1.SourceColumn, "#");
- Assert.AreEqual (false, p1.SourceColumnNullMapping, "#");
- Assert.AreEqual (DataRowVersion.Original, p1.SourceVersion, "#");
- Assert.AreEqual (SqlDbType.VarChar, p1.SqlDbType, "#");
- //Assert.AreEqual (3210, p1.SqlValue, "#");
- Assert.AreEqual ("foo", p1.Value, "#");
- Assert.AreEqual ("database", p1.XmlSchemaCollectionDatabase, "#");
- Assert.AreEqual ("name", p1.XmlSchemaCollectionName, "#");
- Assert.AreEqual ("schema", p1.XmlSchemaCollectionOwningSchema, "#");
+ cmd.CommandText = "INSERT INTO #bug382635 " +
+ "(description) VALUES ('Verifies bug #382635')";
+ cmd.ExecuteNonQuery ();
+
+ cmd.CommandText = "#sp_bug382635";
+ cmd.CommandType = CommandType.StoredProcedure;
+
+ SqlParameter p1 = new SqlParameter ("@Desc", SqlDbType.NVarChar, 15);
+ p1.Value = longstring;
+ Assert.AreEqual (longstring, p1.Value);
+ cmd.Parameters.Add (p1);
+ cmd.ExecuteNonQuery ();
+
+ // Test for truncation
+ SqlCommand selectCmd = new SqlCommand ("SELECT DATALENGTH(description), description from #bug382635", conn);
+
+ rdr = selectCmd.ExecuteReader ();
+ Assert.IsTrue (rdr.Read (), "#A1");
+ Assert.AreEqual (15, rdr.GetValue (0), "#A2");
+ Assert.AreEqual (longstring.Substring (0, 15), rdr.GetValue (1), "#A3");
+ Assert.AreEqual (longstring, p1.Value, "#A4");
+ rdr.Close ();
+
+ // Test to ensure truncation is not done in the Value getter/setter
+ p1.Size = 12;
+ p1.Value = longstring.Substring (0, 22);
+ p1.Size = 14;
+ cmd.ExecuteNonQuery ();
+
+ rdr = selectCmd.ExecuteReader ();
+ Assert.IsTrue (rdr.Read (), "#B1");
+ Assert.AreEqual (14, rdr.GetValue (0), "#B2");
+ Assert.AreEqual (longstring.Substring (0, 14), rdr.GetValue (1), "#B3");
+ Assert.AreEqual (longstring.Substring (0, 22), p1.Value, "#B4");
+ rdr.Close ();
+
+ // Size exceeds size of value
+ p1.Size = 40;
+ cmd.ExecuteNonQuery ();
+
+ rdr = selectCmd.ExecuteReader ();
+ Assert.IsTrue (rdr.Read (), "#C1");
+ Assert.AreEqual (14, rdr.GetValue (0), "#C2");
+ Assert.AreEqual (longstring.Substring (0, 14), rdr.GetValue (1), "#C3");
+ rdr.Close ();
}
[Test]
- public void CompareInfoTest ()
+ public void ConversionToSqlTypeInvalid ()
{
- SqlParameter parameter = new SqlParameter ();
- Assert.AreEqual (SqlCompareOptions.None, parameter.CompareInfo, "#1 Default value should be System.Data.SqlTypes.SqlCompareOptions.None");
+ string insert_data = "insert into datetime_family (id, type_datetime) values (6000, @type_datetime)";
+ string delete_data = "delete from datetime_family where id = 6000";
- parameter.CompareInfo = SqlCompareOptions.IgnoreNonSpace;
- Assert.AreEqual (SqlCompareOptions.IgnoreNonSpace, parameter.CompareInfo, "#2 It should return CompareOptions.IgnoreSpace after setting this value for the property");
+ object [] values = new object [] {
+ 5,
+ true,
+ 40L,
+ "invalid date",
+ };
+
+ try {
+ for (int i = 0; i < values.Length; i++) {
+ object value = values [i];
+
+ cmd = conn.CreateCommand ();
+ cmd.CommandText = insert_data;
+ SqlParameter param = cmd.Parameters.Add ("@type_datetime", SqlDbType.DateTime);
+ param.Value = value;
+ cmd.Prepare ();
+
+ try {
+ cmd.ExecuteNonQuery ();
+ Assert.Fail ("#1:" + i);
+ } catch (InvalidCastException) {
+ if (value is string)
+ Assert.Fail ("#2");
+ } catch (FormatException) {
+ if (!(value is string))
+ Assert.Fail ("#3");
+ }
+ }
+ } finally {
+ DBHelper.ExecuteNonQuery (conn, delete_data);
+ }
}
-
- [Test]
- public void LocaleIdTest ()
+
+ [Test] // bug #382589
+ public void DecimalMaxAsParamValueTest ()
{
- SqlParameter parameter = new SqlParameter ();
- Assert.AreEqual (0, parameter.LocaleId, "#1 Default value for the property should be 0");
+ 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 ();
- parameter.LocaleId = 15;
- Assert.AreEqual(15, parameter.LocaleId, "#2");
+ 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 (102m, pValue.Value, "Parameter value mismatch");
}
- [Test]
- public void SqlValue ()
+ [Test] // bug #382589
+ public void DecimalMinAsParamValueTest ()
{
- SqlParameter parameter = new SqlParameter ();
- Assert.AreEqual (null, parameter.SqlValue, "#1 Default value for the property should be Null");
+ if (ClientVersion == 7)
+ Assert.Ignore ("Maximum precision is 28.");
- parameter.SqlValue = SqlDbType.Char.ToString ();
- Assert.AreEqual ("Char", parameter.SqlValue, "#1 The value for the property should be Char after setting SqlDbType to Char");
+ 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");
}
-#endif
- [Test]
- // Test for Bug#382635
- public void ParameterSize_compatibility_Test ()
+ [Test] // bug #382589
+ public void DecimalMaxAsParamValueExceptionTest ()
{
- SqlConnection conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
- conn.Open ();
- string longstring = new String('x', 256);
+ 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);
- SqlCommand cmd, cmd1;
try {
- cmd = new SqlCommand ("create table #bug382635 (description varchar(50))", conn);
- cmd.ExecuteNonQuery ();
- } catch (SqlException e) {
- Assert.Fail ("#PSCT1 - Exception thrown while creating the temp table");
- throw e;
+ 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");
}
+ }
- cmd.CommandText =
- "CREATE PROCEDURE #sp_bug382635 (@Desc varchar(50)) "
- + "AS " + Environment.NewLine
- + "BEGIN" + Environment.NewLine
- + "UPDATE #bug382635 SET description = @Desc" + Environment.NewLine
- + "END";
- cmd.CommandType = CommandType.Text;
+ [Test] // bug# 382589
+ 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 ();
- } catch (SqlException e) {
- Assert.Fail ("#PSCT1 - Exception thrown while creating the temp procedure");
- throw e;
+ 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");
}
+ }
- cmd.CommandText = "INSERT INTO #bug382635 " +
- "(description) VALUES ('This is a test to verify Bug 382635')";
+ [Test] // bug #526794
+ public void ZeroLengthString ()
+ {
+ cmd = new SqlCommand ("create table #bug526794 (name varchar(20) NULL)", conn);
cmd.ExecuteNonQuery ();
- cmd.CommandText = "#sp_bug382635";
- cmd.CommandType = CommandType.StoredProcedure;
+ SqlParameter param;
- SqlParameter p1 = new SqlParameter ("@Desc", SqlDbType.NVarChar, 50);
- p1.Value = longstring;
- cmd.Parameters.Add (p1);
+ 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 ();
- // Test for truncation
- cmd1 = new SqlCommand ("SELECT DATALENGTH(description) from #bug382635", conn);
- Assert.AreEqual (50, cmd1.ExecuteScalar (), "#PSCT1");
+ 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;
- // Test for regular scenarios
- p1.Value = longstring.Substring (0, 20);
+ 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 ();
- Assert.AreEqual (20, cmd1.ExecuteScalar (), "#PSCT1");
- cmd.Dispose ();
- cmd1.Dispose ();
+
+ 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);
+ }
}
}
}