Skip to content

Commit 730e8a5

Browse files
author
Tien Nguyen
committed
Check both parameter name and AseDbType to see if it's the same command parameter's metadata
1 parent 4a3beb4 commit 730e8a5

File tree

4 files changed

+49
-3
lines changed

4 files changed

+49
-3
lines changed

build/common.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<Project>
22
<PropertyGroup>
33
<TargetFrameworks>netcoreapp1.0;netcoreapp1.1;netcoreapp2.0;netcoreapp2.1;netcoreapp2.2;net46;netstandard2.0</TargetFrameworks>
4-
<VersionPrefix>0.19.0</VersionPrefix>
4+
<VersionPrefix>0.19.1</VersionPrefix>
55
<AssemblyVersion>0.11.0.0</AssemblyVersion>
66
<FileVersion>$(VersionPrefix)</FileVersion>
77
<Authors>dataaction</Authors>
88
<PackageTags>Sybase ASE Adaptive SAP AseClient DbProvider</PackageTags>
99
<PackageIcon>icon.png</PackageIcon>
1010
<PackageProjectUrl>https://github.com/DataAction/AdoNetCore.AseClient</PackageProjectUrl>
1111
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
12-
<PackageReleaseNotes>Refer to GitHub - https://github.com/DataAction/AdoNetCore.AseClient/releases/tag/0.19.0</PackageReleaseNotes>
12+
<PackageReleaseNotes>Refer to GitHub - https://github.com/DataAction/AdoNetCore.AseClient/releases/tag/0.19.1</PackageReleaseNotes>
1313
<RepositoryUrl>https://github.com/DataAction/AdoNetCore.AseClient</RepositoryUrl>
1414
<RepositoryType>git</RepositoryType>
1515
</PropertyGroup>

src/AdoNetCore.AseClient/Internal/FormatItem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public string ParameterName
5050
public bool IsDecimalType => DataType == TdsDataType.TDS_DECN ||
5151
DataType == TdsDataType.TDS_NUMN;
5252

53+
public AseDbType AseDbType { get; set; }
5354
/// <summary>
5455
/// Relates to TDS_BLOB
5556
/// </summary>
@@ -73,6 +74,7 @@ public static FormatItem CreateForParameter(AseParameter parameter, DbEnvironmen
7374

7475
var format = new FormatItem
7576
{
77+
AseDbType = parameter.AseDbType,
7678
ParameterName = parameter.ParameterName,
7779
IsOutput = parameter.IsOutput,
7880
IsNullable = parameter.IsNullable,

src/AdoNetCore.AseClient/Internal/InternalConnection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ private IToken[] BuildParameterTokens(AseCommand command)
670670
foreach (var parameter in command.Parameters.SendableParameters)
671671
{
672672
var parameterName = parameter.ParameterName ?? command.Parameters.IndexOf(parameter).ToString();
673-
if (command.FormatItem == null || command.FormatItem.ParameterName != parameterName)
673+
if (!(command.FormatItem != null && command.FormatItem.ParameterName == parameterName && command.FormatItem.AseDbType == parameter.AseDbType))
674674
{
675675
command.FormatItem = FormatItem.CreateForParameter(parameter, _environment, command.CommandType);
676676
}

test/AdoNetCore.AseClient.Tests/Integration/AseCommandTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,50 @@ public void GetDataTypeName_ShouldWorkUtf8(string input, string expectedName)
134134
}
135135
}
136136

137+
[Test]
138+
public void Command_Reuse_ShouldWork()
139+
{
140+
using (var connection = GetConnection())
141+
{
142+
connection.Open();
143+
using (var cmd = connection.CreateCommand())
144+
{
145+
{
146+
var sql = @"SELECT TOP 1 Convert(Decimal(29,10), @value)";
147+
var p = cmd.CreateParameter();
148+
p.ParameterName = "@value";
149+
p.DbType = System.Data.DbType.Decimal;
150+
p.Value = 6579.64648m;
151+
cmd.CommandText = sql;
152+
cmd.Parameters.Add(p);
153+
154+
// 6579.64648m sent to server
155+
using (var rd = cmd.ExecuteReader(System.Data.CommandBehavior.Default))
156+
{
157+
rd.Read();
158+
var result = rd.GetDecimal(0);
159+
Assert.AreEqual(6579.64648M, result);
160+
}
161+
162+
p = cmd.CreateParameter();
163+
p.ParameterName = "@value";
164+
p.DbType = System.Data.DbType.Single;
165+
p.Value = 6579.64648f;
166+
cmd.Parameters.Clear();
167+
cmd.Parameters.Add(p);
168+
169+
// decimal formatter applied to 6579.64648f and returned value is 65.79....
170+
using (var rd = cmd.ExecuteReader(System.Data.CommandBehavior.Default))
171+
{
172+
rd.Read();
173+
var result = rd.GetDecimal(0);
174+
Assert.AreEqual(6579.646484375M, result);
175+
}
176+
}
177+
}
178+
}
179+
}
180+
137181
private static IEnumerable<TestCaseData> GetDataTypeName_ShouldWork_Cases()
138182
{
139183
yield return new TestCaseData("convert(unichar(2), 'À')", "unichar");

0 commit comments

Comments
 (0)