diff --git a/Dapper.Tests/Tests.cs b/Dapper.Tests/Tests.cs index e90e2e60c87b2e8d386d2f295f38f83bd00da3e3..8126536b54475d6ed35e3c5dd20fafd49b3c5b6b 100644 --- a/Dapper.Tests/Tests.cs +++ b/Dapper.Tests/Tests.cs @@ -3315,6 +3315,38 @@ public void Issue569_SO38527197_PseudoPositionalParameters_In() } } + [Fact] + public void PseudoPositional_CanUseVariable() + { + using (var connection = ConnectViaOledb()) + { + int id = 42; + var row = connection.QuerySingle("declare @id int = ?id?; select @id as [A], @id as [B];", new { id }); + int a = (int)row.A; + int b = (int)row.B; + a.IsEqualTo(42); + b.IsEqualTo(42); + } + } + [Fact] + public void PseudoPositional_CannotUseParameterMultipleTimes() + { + + using (var connection = ConnectViaOledb()) + { + try + { + int id = 42; + var row = connection.QuerySingle("select ?id? as [A], ?id? as [B];", new { id }); + Assert.Fail(); + } + catch (InvalidOperationException ex) when (ex.Message == "When passing parameters by position, each parameter can only be referenced once") + { + // that's a win + } + } + } + [Fact] public void PseudoPositionalParameters_ExecSingle() {