public async Task ExecuteNonQueryAllAsync_WithOutputParametersAndMultiOut_ExecutesSuccessfully()
        {
            SqlProgram <int, Out <int>, Out <int> > program =
                await SqlProgram <int, Out <int>, Out <int> > .Create(
                    new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString),
                    "spOutputParameters");

            const int inputVal       = 123;
            const int inputOutputVal = 321;

            MultiOut <int> inputOutput = new MultiOut <int>(inputOutputVal);
            MultiOut <int> output      = new MultiOut <int>();

            int[] nonQueryResult = (await program.ExecuteNonQueryAllAsync(inputVal, inputOutput, output)).ToArray();
            Assert.AreEqual(2, nonQueryResult.Length);
            Assert.IsTrue(nonQueryResult.All(i => i == -1));

            Assert.IsNull(inputOutput.OutputError, inputOutput.OutputError?.Message);
            Assert.IsNull(output.OutputError, output.OutputError?.Message);

            Assert.AreEqual(inputOutputVal * 2, inputOutput.OutputValue.Value);
            Assert.AreEqual(inputVal, output.OutputValue.Value);

            Assert.IsTrue(inputOutput.All(o => o.OutputValue.Value == inputOutputVal * 2));
            Assert.IsTrue(output.All(o => o.OutputValue.Value == inputVal));
        }
        public async Task Constructor_WithDefaults_SetsCommandTimeoutToThirtySeconds()
        {
            SqlProgram program = await SqlProgram.Create((Connection)LocalDatabaseConnectionString, "spNonQuery");

            Assert.IsNotNull(program);
            Assert.AreEqual(TimeSpan.FromSeconds(30), program.DefaultCommandTimeout);
        }
        public async Task ExecuteReader_ExecutesSuccessfully()
        {
            SqlProgram readerTest = await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString,
                                                            name : "spUltimateSproc");

            readerTest.ExecuteReader();
        }
        public async Task ExecuteXmlReaderAsync_WithOutputParameters_ExecutesSuccessfully()
        {
            SqlProgram <int, Out <int>, Out <int> > program =
                await SqlProgram <int, Out <int>, Out <int> > .Create((Connection)LocalDatabaseConnectionString, "spOutputParameters");

            const int inputVal       = 123;
            const int inputOutputVal = 321;

            Out <int> inputOutput = new Out <int>(inputOutputVal);
            Out <int> output      = new Out <int>();

            XElement result = await program.ExecuteXmlReaderAsync(
                async (reader, token) => XElement.Load(reader),
                inputVal,
                inputOutput,
                output);

            Assert.AreEqual("<foo>bar</foo>", result.ToString());

            Assert.IsNull(inputOutput.OutputError, inputOutput.OutputError?.Message);
            Assert.IsNull(output.OutputError, output.OutputError?.Message);

            Assert.AreEqual(inputOutputVal * 2, inputOutput.OutputValue.Value);
            Assert.AreEqual(inputVal, output.OutputValue.Value);
        }
        public async Task ExecuteReader_WithEnumerableKeyValuePairParameter_ReturnsTwoColumnTableMatchingTheParameterTypes()
        {
            SqlProgram <IEnumerable <KeyValuePair <int, string> > > tableTypeTest =
                await SqlProgram <IEnumerable <KeyValuePair <int, string> > > .Create((Connection)DifferentLocalDatabaseConnectionString, "spTakesKvpTable");

            string str1 = Random.RandomString(10, false);
            string str2 = Random.RandomString(10, false);
            string str3 = Random.RandomString(10, false);

            IDictionary <int, string> result = tableTypeTest.ExecuteReader(
                reader =>
            {
                IDictionary <int, string> resultSet = new Dictionary <int, string>();
                while (reader.Read())
                {
                    resultSet.Add(reader.GetValue <int>(0), reader.GetValue <string>(1));
                }
                return(resultSet);
            },
                new Dictionary <int, string>
            {
                { 0, str1 },
                { 1, str2 },
                { 2, str3 }
            });

            Assert.AreEqual(3, result.Count);
            Assert.AreEqual(str1, result[0]);
            Assert.AreEqual(str2, result[1]);
            Assert.AreEqual(str3, result[2]);
        }
        public async Task ExecuteXmlReaderAllAsync_WithOutputParametersAndMultiOut_ExecutesSuccessfully()
        {
            SqlProgram <int, Out <int>, Out <int> > program =
                await SqlProgram <int, Out <int>, Out <int> > .Create(
                    new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString),
                    "spOutputParameters");

            const int inputVal       = 123;
            const int inputOutputVal = 321;

            MultiOut <int> inputOutput = new MultiOut <int>(inputOutputVal);
            MultiOut <int> output      = new MultiOut <int>();

            XElement[] result = (await program.ExecuteXmlReaderAllAsync(
                                     async(reader, token) => XElement.Load(reader),
                                     inputVal,
                                     inputOutput,
                                     output)).ToArray();

            Assert.AreEqual(2, result.Length);
            Assert.IsTrue(result.All(i => i.ToString() == "<foo>bar</foo>"));

            Assert.IsNull(inputOutput.OutputError, inputOutput.OutputError?.Message);
            Assert.IsNull(output.OutputError, output.OutputError?.Message);

            Assert.AreEqual(inputOutputVal * 2, inputOutput.OutputValue.Value);
            Assert.AreEqual(inputVal, output.OutputValue.Value);

            Assert.IsTrue(inputOutput.All(o => o.OutputValue.Value == inputOutputVal * 2));
            Assert.IsTrue(output.All(o => o.OutputValue.Value == inputVal));
        }
        public async Task ExecuteNonQuery_WithTupleParameterAndOtherParameters_ExecutesSuccessfully()
        {
            SqlProgram <IEnumerable <Tuple <string, string, string, DateTime, short?> >, int, DateTime> tableTypeTest =
                await SqlProgram <IEnumerable <Tuple <string, string, string, DateTime, short?> >, int, DateTime> .Create(
                    (Connection)DifferentLocalDatabaseConnectionString, "spTakesTupleTablePlusTwo");

            List <TestType> myList =
                new List <TestType>
            {
                new TestType
                {
                    Name    = Random.RandomString(100),
                    Body    = Random.RandomString(500),
                    Email   = Random.RandomString(100),
                    Created = DateTime.Today,
                    LoginId = null
                }
            };

            int nonQueryResult =
                tableTypeTest.ExecuteNonQuery(
                    myList.ToTuple(e => e.Name, e => e.Body, e => e.Email, e => e.Created, e => e.LoginId),
                    Random.RandomInt32());

            Assert.AreEqual(-1, nonQueryResult);
        }
示例#8
0
        public async Task ExecuteScalarAll_WithOutputParametersAndMultiOut_ExecutesSuccessfully()
        {
            SqlProgram <int, Out <int>, Out <int> > program =
                await SqlProgram <int, Out <int>, Out <int> > .Create(
                    new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString),
                    "spOutputParameters");

            const int inputVal       = 123;
            const int inputOutputVal = 321;

            MultiOut <int> inputOutput = new MultiOut <int>(inputOutputVal);
            MultiOut <int> output      = new MultiOut <int>();

            string[] scalarResult = program.ExecuteScalarAll <string>(inputVal, inputOutput, output).ToArray();
            Assert.AreEqual(2, scalarResult.Length);
            Assert.IsTrue(scalarResult.All(i => i == "<foo>bar</foo>"));

            Assert.IsNull(inputOutput.OutputError, inputOutput.OutputError?.Message);
            Assert.IsNull(output.OutputError, output.OutputError?.Message);

            Assert.AreEqual(inputOutputVal * 2, inputOutput.OutputValue.Value);
            Assert.AreEqual(inputVal, output.OutputValue.Value);

            Assert.IsTrue(inputOutput.All(o => o.OutputValue.Value == inputOutputVal * 2));
            Assert.IsTrue(output.All(o => o.OutputValue.Value == inputVal));
        }
        public async Task ExecuteReader_WithReturnResultSet_ExecutesSuccessfully()
        {
            SqlProgram readerTest = await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString,
                                                            name : "spUltimateSproc");

            dynamic result = readerTest.ExecuteReader <dynamic>(
                reader =>
            {
                Assert.IsTrue(reader.Read());

                var res = new
                {
                    Name     = reader.GetValue <string>(0),
                    Age      = reader.GetValue <int>(1),
                    Balance  = reader.GetValue <decimal>(2),
                    IsValued = reader.GetValue <bool>(3)
                };

                Assert.IsFalse(reader.Read());
                Assert.IsFalse(reader.NextResult());

                return(res);
            });

            Assert.IsNotNull(result);

            // Read the sproc defaults.
            Assert.AreEqual("A Test String", result.Name);
            Assert.AreEqual(5, result.Age);
            Assert.AreEqual(200.15M, result.Balance);
            Assert.AreEqual(false, result.IsValued);
        }
        public async Task ExecuteReader_WithSerializableObjectParameter_ReturnsByteArray()
        {
            SqlProgram <TestSerializableObject> serializeObjectTest = await SqlProgram <TestSerializableObject> .Create((Connection)DifferentLocalDatabaseConnectionString, "spTakeByteArray");

            TestSerializableObject objecToSerialize = new TestSerializableObject {
                String1 = Random.RandomString(), String2 = Random.RandomString()
            };

            serializeObjectTest.ExecuteReader(
                reader =>
            {
                Assert.IsTrue(reader.Read());
                Assert.IsInstanceOfType(reader.GetValue(0), typeof(byte[]));

                // Deserialize object
                TestSerializableObject deserializedObject =
                    (TestSerializableObject)reader.GetObjectByName(reader.GetName(0));

                // Check we don't have same object instance.
                Assert.IsFalse(ReferenceEquals(objecToSerialize, deserializedObject));

                // Check equality of object instances using equality method.
                Assert.AreEqual(objecToSerialize, deserializedObject);
            },
                objecToSerialize);
        }
        public async Task ExecuteXmlReaderAsync_WithNoParameters_ExecuteReturnsExpectedString()
        {
            SqlProgram program = await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString, name : "spReturnsXml");

            XElement result = await program.ExecuteXmlReaderAsync(async (reader, token) => XElement.Load(reader));

            Assert.AreEqual("<foo>bar</foo>", result.ToString());
        }
示例#12
0
        public async Task Constructor_WithInvalidProgramName_ThrowsLoggingException()
        {
            SqlProgram <int> timeoutTest = await SqlProgram <int> .Create(
                (Connection)DifferentLocalDatabaseConnectionString,
                "invalidProgramName");

            Assert.IsNotNull(timeoutTest);
        }
示例#13
0
    private void initProgram()
    {
        //初始化新增模版里程序下拉列表
        string sql = "SELECT PROGRAM_CODE,PROGRAM_NAME FROM CODE_PROGRAM WHERE COMPANY_CODE = '" + theCompanyCode + "'";

        SqlProgram.SelectCommand = sql;
        SqlProgram.DataBind();
    }
        public async Task ExecuteNonQuery_WithMoreNullableDateTimeParameterSetToNull_ExecutesSuccessfully()
        {
            var nullableTypesTest =
                await SqlProgram <int, DateTime?, DateTime?, DateTime?, DateTime?, int?, int?, int?> .Create((Connection)DifferentLocalDatabaseConnectionString, "spLoadsOfNullables");

            nullableTypesTest.ExecuteNonQuery(1, null, null, null, null, null, null, 1);
            Assert.IsNotNull(nullableTypesTest);
        }
        public async Task ExecuteNonQuery_WithNullableDateTimeParameterSetToNull_ExecutesSuccessfully()
        {
            SqlProgram <string, int?, decimal, bool, DateTime?> nullableTypesTest =
                await SqlProgram <string, int?, decimal, bool, DateTime?> .Create((Connection)DifferentLocalDatabaseConnectionString, "spUltimateSproc");

            nullableTypesTest.ExecuteNonQuery(Random.RandomString(20), Random.RandomInt32(), decimal.Zero, true, null);
            Assert.IsNotNull(nullableTypesTest);
        }
        public async Task ExecuteNonQuery_ExecutesSuccessfully()
        {
            SqlProgram nonQueryTest = await SqlProgram.Create((Connection)LocalDatabaseConnectionString, name : "spNonQuery");

            int nonQueryResult = nonQueryTest.ExecuteNonQuery();

            Assert.AreEqual(-1, nonQueryResult);
        }
示例#17
0
        public async Task ExecuteScalar_WithNoParameters_ExecuteReturnsExpectedString()
        {
            SqlProgram program = await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString, name : "spReturnsScalar");

            string scalarResult = program.ExecuteScalar <string>();

            Assert.AreEqual("HelloWorld", scalarResult);
        }
        public async Task ExecuteNonQueryAsync_PassNullToNonOptionalParameter()
        {
            SqlProgram <XElement> program =
                await SqlProgram <XElement> .Create((Connection)DifferentLocalDatabaseConnectionString, "spTakesXml");

            // ReSharper disable once RedundantArgumentDefaultValue, ArgumentsStyleLiteral
            await program.ExecuteNonQueryAsync(p1Value : null);
        }
示例#19
0
        public async Task Test_UnmappedProgram_RunsAndReturnsExpectedResult()
        {
            DatabasesConfiguration configuration   = DatabasesConfiguration.Active;
            SqlProgram             unmappedProgram = await configuration.GetSqlProgram("test2", "spReturnsScalar");

            Assert.AreEqual("spReturnsScalar", unmappedProgram.Name);
            Assert.AreEqual("HelloWorld", await unmappedProgram.ExecuteScalarAsync <string>());
        }
        public async Task ExecuteNonQuery_WithEnumerableIntParameter_ExecutesSuccessfully()
        {
            SqlProgram <IEnumerable <int> > tableTypeTest =
                await SqlProgram <IEnumerable <int> > .Create((Connection)DifferentLocalDatabaseConnectionString, "spTakesIntTable");

            int nonQueryResult = tableTypeTest.ExecuteNonQuery(new[] { 1, 2, 3, 4 });

            Assert.AreEqual(-1, nonQueryResult);
        }
 /// <summary>
 ///   Initializes a new instance of the <see cref="SqlProgramExecutionException"/> class.
 /// </summary>
 /// <param name="sqlProgram">The executing SQL program.</param>
 /// <param name="innerException">The inner exception.</param>
 internal SqlProgramExecutionException([NotNull] SqlProgram sqlProgram, [NotNull] Exception innerException)
     : base(
         new LogContext()
         .Set(_prefixReservation, ProgramNameContextKey, sqlProgram.Name),
         innerException,
         () => Resources.SqlProgramExecutionException_ErrorOccurredDuringExecution,
         sqlProgram.Name,
         innerException.Message)
 {
 }
        public async Task ExecuteReaderAll_ExecutesSuccessfully()
        {
            SqlProgram readerTest =
                await SqlProgram.Create(connection : new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString),
                                        name : "spNonQuery");

            readerTest.ExecuteReaderAll();

            // Can't really do any assertions here so test is just that it doesn't throw an exception.
        }