コード例 #1
0
        public void TestExecuteParametersAndReturnValue()
        {
            if (this.connectionType == ConnectionType.Oracle)
            {
                // Cannot return a value in an Oracle stored procedure - have to use OUT parameters
                return;
            }

            var parameters = new DatabaseModel.ProcedureParameters(DatabaseObjectCreation.CreateParameterTestProc(this.connectionType));

            try
            {
                List <byte> bytes  = new List <byte>(new byte[] { 1, 2, 3, 4, 5 });
                dynamic     result = Execute(this.connectionType, "Test Proc", parameters, 1, 1.0, "Qwer", string.Empty, new DateTime(1987, 1, 24), DatabaseModel.DefaultDateTime, bytes, new List <byte>()).Value;

                Assert.AreEqual(1, result.ResultParameters.RETURN_VALUE);
                Assert.AreEqual("Qwer", result.ResultParameters.StringValueOut);
                Assert.AreEqual(new DateTime(1987, 1, 24), result.ResultParameters.DateValueOut);
                Assert.AreEqual(bytes, result.ResultParameters.BytesValueOut);
            }
            finally
            {
                DatabaseObjectCreation.RemoveTestProc(this.connectionType);
            }
        }
コード例 #2
0
        private void Save()
        {
            DatabaseModel.ProcedureParameters savedParameters = new DatabaseModel.ProcedureParameters();
            int parameterPosition = 0;

            foreach (var nextParameterModel in Parameters)
            {
                if (string.IsNullOrEmpty(nextParameterModel.Name))
                {
                    continue;
                }
                if (savedParameters.Any(p => p.Name.Equals(nextParameterModel.Name, StringComparison.CurrentCultureIgnoreCase)))
                {
                    if (ShowMessage != null)
                    {
                        ShowMessage(this, new ShowMessageEventArgs("Duplicate parameter name: " + nextParameterModel.Name, "Save parameters", MessageBoxButton.OK, MessageBoxImage.Asterisk));
                    }
                    return;
                }
                if ((nextParameterModel.Direction == DatabaseModel.ParameterDirection.ReturnValue) && (savedParameters.Any(p => p.Direction == DatabaseModel.ParameterDirection.ReturnValue)))
                {
                    if (ShowMessage != null)
                    {
                        ShowMessage(this, new ShowMessageEventArgs("At most one Return Value parameter is allowed.", "Save parameters", MessageBoxButton.OK, MessageBoxImage.Asterisk));
                    }
                    return;
                }
                nextParameterModel.ProcedureParameter.Position = parameterPosition++;
                savedParameters.Add(nextParameterModel.ProcedureParameter);
            }

            EditingInfo.ShouldUpdateProcedureParameters = true;
            EditingInfo.ProcedureParameters             = savedParameters;
            DialogResult = true;
        }
コード例 #3
0
        public void TestExecuteParametersAndNoReturnValue()
        {
            var parameters = new DatabaseModel.ProcedureParameters(DatabaseObjectCreation.CreateParameterTestProc(this.connectionType).Where(p => p.Direction != DatabaseModel.ParameterDirection.ReturnValue));

            try
            {
                List <byte> bytes  = new List <byte>(new byte[] { 1, 2, 3, 4, 5 });
                dynamic     result = Execute(this.connectionType, "Test Proc", parameters, 1, 1.0, "Qwer", string.Empty, new DateTime(1987, 1, 24), DatabaseModel.DefaultDateTime, bytes, new List <byte>()).Value;

                Assert.AreEqual("Qwer", result.ResultParameters.StringValueOut);
                Assert.AreEqual(new DateTime(1987, 1, 24), result.ResultParameters.DateValueOut);
                Assert.AreEqual(bytes, result.ResultParameters.BytesValueOut);
            }
            finally
            {
                DatabaseObjectCreation.RemoveTestProc(this.connectionType);
            }
        }
コード例 #4
0
        private static FunctionResult Execute(ConnectionTypeSelection connectionType, Transaction transaction, string connectionString, string storedProcedureName,
                                              DatabaseModel.ProcedureParameters parameters = null, object[] parameterValues = null, DatabaseModel.ResultSets resultSets = null, int?numberOfResultSets = null,
                                              OutputOption outputOption = OutputOption.RowByRow)
        {
            if (parameters == null)
            {
                parameters = new DatabaseModel.ProcedureParameters();
            }
            if (resultSets == null)
            {
                resultSets = new DatabaseModel.ResultSets();
            }

            int i = 0, j = 0;
            var tester = (new FunctionTester <ExecuteStoredProcedure.ExecuteStoredProcedure>()).Compile(new PropertyValue[] {
                new PropertyValue(DbShared.ConnectionTypePropertyName, connectionType),
                new PropertyValue(ExecuteStoredProcedureShared.ParametersPropertyName, parameters),
                new PropertyValue(ExecuteStoredProcedureShared.OutputOptionPropertyName, outputOption),
                new PropertyValue(ExecuteStoredProcedureShared.ResultSetCountPropertyName, (numberOfResultSets.HasValue)? numberOfResultSets.Value : resultSets.Count)
            }.Concat(
                                                                                                            resultSets.Select(r => new PropertyValue(string.Format(ExecuteStoredProcedureShared.ResultSetPropertyNameFormat, ++i), resultSets[j++]))
                                                                                                            ).ToArray());

            i = 0;

            var executeParameters = new ParameterValue[]
            {
                new ParameterValue(ExecuteStoredProcedureShared.StoredProcedurePropertyName, storedProcedureName)
            };

            if (connectionType == ConnectionTypeSelection.UseTransaction)
            {
                executeParameters = executeParameters.Concat(new ParameterValue[] { new ParameterValue(DbShared.TransactionPropertyName, transaction) }).ToArray();
            }
            else
            {
                executeParameters = executeParameters.Concat(new ParameterValue[] { new ParameterValue(DbShared.ConnectionStringPropertyName, connectionString) }).ToArray();
            }

            return(tester.Execute(executeParameters
                                  .Concat(
                                      parameters.Where(p => (p.Direction == DatabaseModel.ParameterDirection.In) || (p.Direction == DatabaseModel.ParameterDirection.InOut))
                                      .Select(p => new ParameterValue(p.DisplayPropertyName, parameterValues[i++]))).ToArray()));
        }
コード例 #5
0
        public void TestExecuteWhereInputParametersMatchFunctionPropertyNames()
        {
            DatabaseObjectCreation.CreateTestTable("CREATE TABLE TESTTABLE ( INTVALUE1 INT, INTVALUE2 INT)", this.connectionType);

            string createProcedureStatement = (this.connectionType == ConnectionType.Oracle) ?
                                              @"CREATE PROCEDURE ""Test Proc"" (
					""@{0}"" INT,
					""@{1}"" INT
				)
				AS BEGIN
					INSERT INTO TESTTABLE (""INTVALUE1"",""INTVALUE2"") VALUES (""@{0}"",""@{1}"");
				END;"
                        : @"CREATE PROCEDURE ""Test Proc"" (
					@{0} INT,
					@{1} INT
				)
				AS BEGIN
					INSERT INTO TestTable (IntValue1, IntValue2) VALUES(@{0}, @{1})
				END;"                ;

            var parameters = new DatabaseModel.ProcedureParameters(
                DatabaseObjectCreation.CreateTestProc(string.Format(createProcedureStatement, ExecuteStoredProcedureShared.ParametersPropertyName, DbShared.TransactionPropertyName), connectionType)
                .Where(p => p.Direction != DatabaseModel.ParameterDirection.ReturnValue));

            try
            {
                Execute(this.connectionType, "Test Proc", parameters, 1, 2);

                DataTable results = DatabaseHelpers.GetDataTable("SELECT * FROM TESTTABLE", this.connectionType);
                Assert.AreEqual(1, results.Rows.Count);
                Assert.AreEqual(1, results.Rows[0][0]);
                Assert.AreEqual(2, results.Rows[0][1]);
            }
            finally
            {
                DatabaseObjectCreation.RemoveTestProc(this.connectionType);
                DatabaseObjectCreation.RemoveTestTable(this.connectionType);
            }
        }
コード例 #6
0
        private IFunctionData UpdateToVersion2(IFunctionData data)
        {
            IPropertyData parametersProperty;

            if (data.TryFindPropertyById(ExecuteStoredProcedureShared.ParametersPropertyName, out parametersProperty))
            {
                DatabaseModel.ProcedureParameters parameterValues = parametersProperty.Value as DatabaseModel.ProcedureParameters;
                if (parameterValues != null)
                {
                    foreach (DatabaseModel.ProcedureParameter parameter in parameterValues)
                    {
                        IPropertyData parameterProperty;
                        if (data.TryFindPropertyById(parameter.Name, out parameterProperty))
                        {
                            data = data.UpdateProperty(parameterProperty,
                                                       parameter.DisplayPropertyId, parameter.DisplayPropertyName, parameterProperty.TypeReference, parameterProperty.Value, parameterProperty.IsVisible, parameterProperty.ValueUsage);
                        }
                    }
                }
            }

            return(data.UpdateVersion("2"));
        }
コード例 #7
0
 private static FunctionResult Execute(Transaction transaction, string storedProcedureName, DatabaseModel.ProcedureParameters parameters = null, object[] parameterValues = null, bool fetchResultSets = false, OutputOption outputOption = OutputOption.RowByRow)
 {
     return(Execute(ConnectionTypeSelection.UseTransaction, transaction, null, storedProcedureName, parameters, parameterValues, fetchResultSets ? FetchResultSets(transaction.GetConnectionType()) : null, null, outputOption));
 }
コード例 #8
0
 private static FunctionResult Execute(ConnectionType connectionType, string connectionString, string storedProcedureName, DatabaseModel.ProcedureParameters parameters = null, object[] parameterValues = null, DatabaseModel.ResultSets resultSets = null, OutputOption outputOption = OutputOption.RowByRow)
 {
     return(Execute(connectionType.ToConnectionTypeSelection(), null, connectionString, storedProcedureName, parameters, parameterValues, resultSets, null, outputOption));
 }
コード例 #9
0
 private static FunctionResult Execute(ConnectionType connectionType, string connectionString, string storedProcedureName, DatabaseModel.ProcedureParameters parameters = null, object[] parameterValues = null, bool fetchResultSets = false, OutputOption outputOption = OutputOption.RowByRow)
 {
     return(Execute(connectionType, connectionString, storedProcedureName, parameters, parameterValues, fetchResultSets ? FetchResultSets(connectionType) : null, outputOption));
 }
コード例 #10
0
 private static FunctionResult Execute(ConnectionType connectionType, string storedProcedureName, DatabaseModel.ProcedureParameters parameters = null, params object[] parameterValues)
 {
     return(Execute(connectionType, DatabaseHelpers.GetDefaultConnectionString(connectionType), storedProcedureName, parameters, parameterValues, false));
 }