public async Task ExecuteReaderAllAsync_WithAllParametersSet_ExecutesAndReturnsExpectedResult() { SqlProgram <string, int, decimal, bool> readerTest = await SqlProgram <string, int, decimal, bool> .Create( new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString), "spReturnsTable"); Task <IEnumerable <dynamic> > result = readerTest.ExecuteReaderAllAsync( c => { c.SetParameter("@stringParam", AString); c.SetParameter("@intParam", AInt); c.SetParameter("@decimalParam", ADecimal); c.SetParameter("@boolParam", ABool); }, async(reader, token) => { if (await reader.ReadAsync(token)) { return(CreateDatabaseResult(reader)); } throw new Exception("Critical Test Error"); }); Assert.IsNotNull(result); result.Wait(); foreach (dynamic o in result.Result) { Assert.AreEqual(AString, o.Name); Assert.AreEqual(AInt, o.Age); Assert.AreEqual(ADecimal, o.Balance); Assert.AreEqual(ABool, o.IsValued); } }
public async Task ExecuteReaderAllAsync_ExecutesAndReturnsExpectedResult() { SqlProgram program = await SqlProgram.Create(new LoadBalancedConnection(LocalDatabaseConnectionString, LocalDatabaseCopyConnectionString), "spReturnsTable"); Task readerTask = program.ExecuteReaderAllAsync(); Assert.IsNotNull(readerTask); }
public async Task ExecuteReaderAllAsync_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[] result = (await program.ExecuteReaderAllAsync( async(reader, token) => { Assert.IsTrue(await reader.ReadAsync()); string res = reader.GetString(0); Assert.IsFalse(await reader.ReadAsync()); Assert.IsFalse(await reader.NextResultAsync()); return(res); }, inputVal, inputOutput, output)).ToArray(); Assert.AreEqual(2, result.Length); Assert.IsTrue(result.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 ExecuteReaderAllAsync_WithOutputParametersAndOut_ThrowsArgumentException() { 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; Out <int> inputOutput = new Out <int>(inputOutputVal); Out <int> output = new Out <int>(); await program.ExecuteReaderAllAsync( async (reader, token) => { Assert.Fail("Shouldnt reach this point."); }, inputVal, inputOutput, output); }