public void TestSqlConnectionExecuteQueryViaDynamicsWithEmptyArrayParameters()
        {
            DbSettingMapper.Add <PrivateDbConnection>(new CustomDbSetting(), true);
            using (var connection = new PrivateDbConnection())
            {
                var sql   = @"
select * from someTable
where id in (@normalArray)
  and id in (@emptyArray)
  and id in (@nullArray)
  and id in (@concat1ArrayA, @concat1ArrayB)
  and id in (@concat2ArrayA, @concat2ArrayB)
  and id in (@concat3ArrayA, @concat3ArrayB)";
                var param = new
                {
                    normalArray   = new[] { 5, 6 },
                    emptyArray    = Array.Empty <int>(),
                    nullArray     = (IEnumerable <int>)null,
                    concat1ArrayA = new[] { 100, 101 },
                    concat1ArrayB = new[] { 102, 103 },
                    concat2ArrayA = Array.Empty <int>(),
                    concat2ArrayB = new[] { 200, 201 },
                    concat3ArrayA = Array.Empty <int>(),
                    concat3ArrayB = Array.Empty <int>()
                };
                var command = connection.CreateDbCommandForExecution(sql, param, skipCommandArrayParametersCheck: false);

                var expectedSql = @"
select * from someTable
where id in (@normalArray0, @normalArray1)
  and id in ((SELECT @emptyArray WHERE 1 = 0))
  and id in (@nullArray)
  and id in (@concat1ArrayA0, @concat1ArrayA1, @concat1ArrayB0, @concat1ArrayB1)
  and id in ((SELECT @concat2ArrayA WHERE 1 = 0), @concat2ArrayB0, @concat2ArrayB1)
  and id in ((SELECT @concat3ArrayA WHERE 1 = 0), (SELECT @concat3ArrayB WHERE 1 = 0))";
                Assert.AreEqual(expectedSql, command.CommandText);
                Assert.AreEqual(13, command.Parameters.Count);
                Assert.AreEqual(5, command.Parameters["@normalArray0"].Value);
                Assert.AreEqual(6, command.Parameters["@normalArray1"].Value);
                Assert.AreEqual(DBNull.Value, command.Parameters["@emptyArray"].Value);
                Assert.AreEqual(DBNull.Value, command.Parameters["@nullArray"].Value);
                Assert.AreEqual(100, command.Parameters["@concat1ArrayA0"].Value);
                Assert.AreEqual(101, command.Parameters["@concat1ArrayA1"].Value);
                Assert.AreEqual(102, command.Parameters["@concat1ArrayB0"].Value);
                Assert.AreEqual(103, command.Parameters["@concat1ArrayB1"].Value);
                Assert.AreEqual(DBNull.Value, command.Parameters["@concat2ArrayA"].Value);
                Assert.AreEqual(200, command.Parameters["@concat2ArrayB0"].Value);
                Assert.AreEqual(201, command.Parameters["@concat2ArrayB1"].Value);
                Assert.AreEqual(DBNull.Value, command.Parameters["@concat3ArrayA"].Value);
                Assert.AreEqual(DBNull.Value, command.Parameters["@concat3ArrayB"].Value);
            }
        }
示例#2
0
        public void ParameterDbType_DecideOrder_Attribute()
        {
            using var connection = new PrivateDbConnection();
            var sql = "SELECT @V";

            var command = connection.CreateDbCommandForExecution(sql, new WithAttributeModel {
                V = null
            }, skipCommandArrayParametersCheck: false);

            Assert.AreEqual(DBNull.Value, command.Parameters["@V"].Value);
            Assert.AreEqual(DbType.Single, command.Parameters["@V"].DbType);

            command = connection.CreateDbCommandForExecution(sql, new WithAttributeModel {
                V = WithAttributeEnum.B
            }, skipCommandArrayParametersCheck: false);
            Assert.IsInstanceOfType(command.Parameters["@V"].Value, typeof(WithAttributeEnum));
            Assert.AreEqual(WithAttributeEnum.B, (WithAttributeEnum)command.Parameters["@V"].Value);
            Assert.AreEqual(DbType.Single, command.Parameters["@V"].DbType);
        }
示例#3
0
        public void ParameterDbType_DecideOrder_Property()
        {
            TypeMapper.Add <WithPropertyModel>(m => m.V, DbType.Double);

            using var connection = new PrivateDbConnection();
            var sql = "SELECT @V";

            var command = connection.CreateDbCommandForExecution(sql, new WithPropertyModel {
                V = null
            }, skipCommandArrayParametersCheck: false);

            Assert.AreEqual(DBNull.Value, command.Parameters["@V"].Value);
            Assert.AreEqual(DbType.Double, command.Parameters["@V"].DbType);

            command = connection.CreateDbCommandForExecution(sql, new WithPropertyModel {
                V = WithPropertyEnum.B
            }, skipCommandArrayParametersCheck: false);
            Assert.IsInstanceOfType(command.Parameters["@V"].Value, typeof(WithPropertyEnum));
            Assert.AreEqual(WithPropertyEnum.B, (WithPropertyEnum)command.Parameters["@V"].Value);
            Assert.AreEqual(DbType.Double, command.Parameters["@V"].DbType);
        }