Example #1
0
        public void SqlServer_Multiple_Results_Command_Execute_Test()
        {
            ScriptExecutor.ExecuteScript(ConnectionManager.GetConnection("Master"),
                                         @"
USE master
GO

IF EXISTS
(
    SELECT NAME
    FROM Sys.Databases
    WHERE Name = N'TestMultipleResults'
)
BEGIN
    DROP DATABASE TestMultipleResults
END
GO

CREATE DATABASE TestMultipleResults
GO

USE TestMultipleResults
GO

CREATE TABLE TestMultipleResults..Category(
    CategoryId INT NOT NULL,
    [Description] VARCHAR(50)
)
GO

ALTER TABLE TestMultipleResults..Category
ADD CONSTRAINT Category_PK PRIMARY KEY (CategoryId)
GO

INSERT INTO TestMultipleResults..Category
(CategoryId, [Description])
VALUES 
	(1, 'Category 1'),
	(2, 'Category 2'),
	(3, 'Category 3')
	
GO
",
                                         "^GO");

            // Stored procedures need to be creates with the current database connection
            ScriptExecutor.ExecuteScript(ConnectionManager.GetConnection(connectionName),
                                         @"
CREATE PROCEDURE GetMultipleResultSets
AS
BEGIN
	SELECT COUNT(*) FROM TestMultipleResults..Category
	
	SELECT CategoryId, [Description] FROM TestMultipleResults..Category
END
GO
",
                                         "^GO");

            // Demonstrates how to get a scalar in a multiple result (we need a wrapper object)
            var resultSet1 = ResultSet.Object <CountWrapper>()
                             .OnRecordRead((reader, wrapper) =>
            {
                wrapper.Count = reader.GetInt32(0);
            });

            var resultSet2 = ResultSet.Collection <Category>()
                             .OnRecordRead((reader, category) =>
            {
                category.Id          = reader.GetInt32(0);
                category.Description = reader.GetString(1);
            });

            var multipleResultsCmd = Command
                                     .MultipleResults()
                                     .Connection(connectionName)
                                     .StoredProcedure("GetMultipleResultSets")
                                     .ResultSets(
                resultSet1,
                resultSet2
                )
                                     .Execute();

            Assert.AreEqual(3, resultSet1.Data.Count); // Total of records

            Assert.AreEqual(3, resultSet2.Data.Count); // Three categories
            Assert.AreEqual("Category 1", resultSet2.Data[0].Description);
            Assert.AreEqual("Category 2", resultSet2.Data[1].Description);
            Assert.AreEqual("Category 3", resultSet2.Data[2].Description);
        }