Skip to content

Commit aee6fdf

Browse files
committed
Fix/suppress new code style warnings.
These were detected by either .NET 9 Preview 3 SDK or Visual Studio 2022 v17.10 Preview 3.
1 parent 033abea commit aee6fdf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+446
-430
lines changed

.editorconfig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@ indent_style = tab
1616
indent_size = 4
1717

1818
# changes from VS2017 defaults
19+
csharp_style_expression_bodied_local_functions = true:suggestion
1920
csharp_style_expression_bodied_methods = true:suggestion
2021
csharp_style_expression_bodied_constructors = true:suggestion
2122
csharp_style_expression_bodied_operators = true:suggestion
23+
csharp_style_namespace_declarations = file_scoped
2224
csharp_prefer_braces = false:none
2325
csharp_indent_switch_labels = true
2426
csharp_space_after_cast = true
2527
csharp_preserve_single_line_statements = false
28+
dotnet_style_prefer_conditional_expression_over_return = false:suggestion
2629

2730
# use VS2017 defaults, but make them warnings (instead of none)
2831
dotnet_style_qualification_for_field = false:warning
@@ -84,7 +87,11 @@ dotnet_diagnostic.CA2100.severity = none # Review SQL queries for security vulne
8487
dotnet_diagnostic.CA2213.severity = silent # Disposable fields should be disposed.
8588
dotnet_diagnostic.CA5398.severity = none # Avoid hardcoded SslProtocols values.
8689
dotnet_diagnostic.IDE0044.severity = error # Make fields readonly.
90+
dotnet_diagnostic.IDE0045.severity = suggestion # Use conditional expression for assignment.
91+
dotnet_diagnostic.IDE0058.severity = none # Remove unnecessary expression value.
92+
dotnet_diagnostic.IDE0059.severity = none # Remove unnecessary value assignment.
8793
dotnet_diagnostic.IDE0065.severity = error # Using directives must be placed outside of a namespace declaration.
94+
dotnet_diagnostic.IDE0072.severity = silent # Add missing cases to switch expression.
8895
dotnet_diagnostic.SA1003.severity = none # Operator must not be followed by whitespace.
8996
dotnet_diagnostic.SA1008.severity = none # Opening parenthesis must not be preceded by a space.
9097
dotnet_diagnostic.SA1009.severity = none # Closing parenthesis must not be followed by a space.

src/MySqlConnector/ColumnReaders/BinaryDateTimeColumnReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public override object ReadValue(ReadOnlySpan<byte> data, ColumnDefinitionPayloa
4747

4848
try
4949
{
50-
return m_allowZeroDateTime ? (object) new MySqlDateTime(year, month, day, hour, minute, second, microseconds) :
50+
return m_allowZeroDateTime ? new MySqlDateTime(year, month, day, hour, minute, second, microseconds) :
5151
#if NET7_0_OR_GREATER
5252
new DateTime(year, month, day, hour, minute, second, microseconds / 1000, microseconds % 1000, m_dateTimeKind);
5353
#else

src/MySqlConnector/ColumnReaders/GuidBinary16ColumnReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public static Guid ReadGuid(ReadOnlySpan<byte> data) =>
2020
#elif NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER
2121
new(stackalloc byte[16] { data[3], data[2], data[1], data[0], data[5], data[4], data[7], data[6], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15] });
2222
#else
23-
new(new[] { data[3], data[2], data[1], data[0], data[5], data[4], data[7], data[6], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15] });
23+
new([data[3], data[2], data[1], data[0], data[5], data[4], data[7], data[6], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15]]);
2424
#endif
2525
}

src/MySqlConnector/ColumnReaders/GuidTimeSwapBinary16ColumnReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ public static Guid ReadGuid(ReadOnlySpan<byte> data) =>
1818
#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER
1919
new(stackalloc byte[16] { data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15] });
2020
#else
21-
new(new[] { data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15] });
21+
new([data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15]]);
2222
#endif
2323
}

src/MySqlConnector/Core/CachedProcedure.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ FROM information_schema.parameters
7979
cmd.Parameters.AddWithValue("@component", component);
8080

8181
using var reader = await cmd.ExecuteReaderNoResetTimeoutAsync(CommandBehavior.Default, ioBehavior, cancellationToken).ConfigureAwait(false);
82-
await reader.ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
82+
_ = await reader.ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
8383
routineCount = reader.GetInt32(0);
84-
await reader.NextResultAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
84+
_ = await reader.NextResultAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
8585

8686
while (await reader.ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false))
8787
{
@@ -168,17 +168,17 @@ internal static List<CachedParameter> ParseParameters(string parametersSql)
168168
if (parameter.StartsWith("INOUT ", StringComparison.OrdinalIgnoreCase))
169169
{
170170
direction = "INOUT";
171-
parameter = parameter.Substring(6);
171+
parameter = parameter[6..];
172172
}
173173
else if (parameter.StartsWith("OUT ", StringComparison.OrdinalIgnoreCase))
174174
{
175175
direction = "OUT";
176-
parameter = parameter.Substring(4);
176+
parameter = parameter[4..];
177177
}
178178
else if (parameter.StartsWith("IN ", StringComparison.OrdinalIgnoreCase))
179179
{
180180
direction = "IN";
181-
parameter = parameter.Substring(3);
181+
parameter = parameter[3..];
182182
}
183183

184184
var parts = s_parameterName.Match(parameter);
@@ -206,7 +206,7 @@ internal static string ParseDataType(string sql, out bool unsigned, out int leng
206206
}
207207

208208
var list = sql.Trim().Split(' ');
209-
var type = string.Empty;
209+
string? type;
210210

211211
if (list.Length < 2 || !s_typeMapping.TryGetValue(list[0] + ' ' + list[1], out type))
212212
{

src/MySqlConnector/Core/ConnectionPool.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System.Collections.Concurrent;
22
using System.Diagnostics;
3-
using System.Diagnostics.Metrics;
43
using System.Net;
5-
using System.Security.Authentication;
64
using Microsoft.Extensions.Logging;
75
using MySqlConnector.Logging;
86
using MySqlConnector.Protocol.Serialization;
@@ -140,7 +138,7 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
140138
}
141139
}
142140

143-
m_sessionSemaphore.Release();
141+
_ = m_sessionSemaphore.Release();
144142
throw;
145143
}
146144
}
@@ -172,14 +170,14 @@ public async ValueTask ReturnAsync(IOBehavior ioBehavior, ServerSession session)
172170
try
173171
{
174172
lock (m_leasedSessions)
175-
m_leasedSessions.Remove(session.Id);
173+
_ = m_leasedSessions.Remove(session.Id);
176174
MetricsReporter.RemoveUsed(this);
177175
session.OwningConnection = null;
178176
var sessionHealth = GetSessionHealth(session);
179177
if (sessionHealth == 0)
180178
{
181179
lock (m_sessions)
182-
m_sessions.AddFirst(session);
180+
_ = m_sessions.AddFirst(session);
183181
MetricsReporter.AddIdle(this);
184182
}
185183
else
@@ -194,15 +192,15 @@ public async ValueTask ReturnAsync(IOBehavior ioBehavior, ServerSession session)
194192
}
195193
finally
196194
{
197-
m_sessionSemaphore.Release();
195+
_ = m_sessionSemaphore.Release();
198196
}
199197
}
200198

201199
public async Task ClearAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
202200
{
203201
// increment the generation of the connection pool
204202
Log.ClearingConnectionPool(m_logger, Id);
205-
Interlocked.Increment(ref m_generation);
203+
_ = Interlocked.Increment(ref m_generation);
206204
m_procedureCache = null;
207205
await RecoverLeakedSessionsAsync(ioBehavior).ConfigureAwait(false);
208206
await CleanPoolAsync(ioBehavior, session => session.PoolGeneration != m_generation, false, cancellationToken).ConfigureAwait(false);
@@ -406,13 +404,13 @@ private async Task CreateMinimumPooledSessions(MySqlConnection connection, IOBeh
406404
var session = await ConnectSessionAsync(connection, s_createdToReachMinimumPoolSize, Stopwatch.GetTimestamp(), null, ioBehavior, cancellationToken).ConfigureAwait(false);
407405
AdjustHostConnectionCount(session, 1);
408406
lock (m_sessions)
409-
m_sessions.AddFirst(session);
407+
_ = m_sessions.AddFirst(session);
410408
MetricsReporter.AddIdle(this);
411409
}
412410
finally
413411
{
414412
// connection is in pool; semaphore shouldn't be held any more
415-
m_sessionSemaphore.Release();
413+
_ = m_sessionSemaphore.Release();
416414
}
417415
}
418416
}
@@ -452,7 +450,7 @@ private async ValueTask<ServerSession> ConnectSessionAsync(MySqlConnection conne
452450
var redirectedSession = new ServerSession(m_connectionLogger, this, m_generation, Interlocked.Increment(ref m_lastSessionId));
453451
try
454452
{
455-
await redirectedSession.ConnectAsync(redirectedSettings, connection, startingTimestamp, m_loadBalancer, activity, ioBehavior, cancellationToken).ConfigureAwait(false);
453+
_ = await redirectedSession.ConnectAsync(redirectedSettings, connection, startingTimestamp, m_loadBalancer, activity, ioBehavior, cancellationToken).ConfigureAwait(false);
456454
}
457455
catch (Exception ex)
458456
{
@@ -614,7 +612,7 @@ private ConnectionPool(MySqlConnectorLoggingConfiguration loggingConfiguration,
614612
cs.HostNames!.Count == 1 || cs.LoadBalance == MySqlLoadBalance.FailOver ? FailOverLoadBalancer.Instance :
615613
cs.LoadBalance == MySqlLoadBalance.Random ? RandomLoadBalancer.Instance :
616614
cs.LoadBalance == MySqlLoadBalance.LeastConnections ? new LeastConnectionsLoadBalancer(m_hostSessions!) :
617-
(ILoadBalancer) new RoundRobinLoadBalancer();
615+
new RoundRobinLoadBalancer();
618616

619617
// create tag lists for reporting pool metrics
620618
var connectionString = cs.ConnectionStringBuilder.GetConnectionString(includePassword: false);
@@ -812,7 +810,7 @@ private static void OnAppDomainShutDown(object? sender, EventArgs e) =>
812810
ClearPoolsAsync(IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult();
813811

814812
private static readonly ConcurrentDictionary<string, ConnectionPool?> s_pools = new();
815-
private static readonly List<ConnectionPool> s_allPools = new();
813+
private static readonly List<ConnectionPool> s_allPools = [];
816814
private static readonly Action<ILogger, int, string, Exception?> s_createdNewSession = LoggerMessage.Define<int, string>(
817815
LogLevel.Debug, new EventId(EventIds.PoolCreatedNewSession, nameof(EventIds.PoolCreatedNewSession)),
818816
"Pool {PoolId} has no pooled session available; created new session {SessionId}");

src/MySqlConnector/Core/ConnectionSettings.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
#if NETCOREAPP3_0_OR_GREATER
12
using System.Net.Security;
3+
#endif
24
using System.Security.Authentication;
35
using MySqlConnector.Utilities;
46

@@ -148,7 +150,7 @@ public ConnectionSettings(MySqlConnectionStringBuilder csb)
148150
static int ToSigned(uint value) => value >= int.MaxValue ? int.MaxValue : (int) value;
149151
}
150152

151-
public ConnectionSettings CloneWith(string host, int port, string userId) => new ConnectionSettings(this, host, port, userId);
153+
public ConnectionSettings CloneWith(string host, int port, string userId) => new(this, host, port, userId);
152154

153155
private static MySqlGuidFormat GetEffectiveGuidFormat(MySqlGuidFormat guidFormat, bool oldGuids)
154156
{
@@ -326,5 +328,5 @@ private ConnectionSettings(ConnectionSettings other, string host, int port, stri
326328
UseXaTransactions = other.UseXaTransactions;
327329
}
328330

329-
private static readonly string[] s_localhostPipeServer = { "." };
331+
private static readonly string[] s_localhostPipeServer = ["."];
330332
}

src/MySqlConnector/Core/EnlistedTransactionBase.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
namespace MySqlConnector.Core;
44

5-
internal abstract class EnlistedTransactionBase : IEnlistmentNotification
5+
internal abstract class EnlistedTransactionBase(Transaction transaction, MySqlConnection connection) : IEnlistmentNotification
66
{
77
// A MySqlConnection that holds the ServerSession that was enrolled in the transaction
8-
public MySqlConnection Connection { get; set; }
8+
public MySqlConnection Connection { get; set; } = connection;
99

1010
// Whether the connection is idle, i.e., a client has closed it and is no longer using it
1111
public bool IsIdle { get; set; }
1212

1313
// Whether the distributed transaction was prepared successfully
1414
public bool IsPrepared { get; private set; }
1515

16-
public Transaction Transaction { get; private set; }
16+
public Transaction Transaction { get; private set; } = transaction;
1717

1818
public void Start()
1919
{
@@ -51,12 +51,6 @@ void IEnlistmentNotification.Rollback(Enlistment enlistment)
5151

5252
public void InDoubt(Enlistment enlistment) => throw new NotImplementedException();
5353

54-
protected EnlistedTransactionBase(Transaction transaction, MySqlConnection connection)
55-
{
56-
Transaction = transaction;
57-
Connection = connection;
58-
}
59-
6054
protected abstract void OnStart();
6155
protected abstract void OnPrepare(PreparingEnlistment enlistment);
6256
protected abstract void OnCommit(Enlistment enlistment);

src/MySqlConnector/Core/ILoadBalancer.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,7 @@ public IReadOnlyList<string> LoadBalance(IReadOnlyList<string> hosts)
3535
lock (m_random)
3636
j = m_random.Next(i + 1);
3737
if (i != j)
38-
{
39-
var temp = shuffled[i];
40-
shuffled[i] = shuffled[j];
41-
shuffled[j] = temp;
42-
}
38+
(shuffled[j], shuffled[i]) = (shuffled[i], shuffled[j]);
4339
}
4440
return shuffled;
4541
}

src/MySqlConnector/Core/MetricsReporter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ public static void RemovePendingRequest(ConnectionPool? pool)
2828

2929
static MetricsReporter()
3030
{
31-
ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.idle.max",
31+
_ = ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.idle.max",
3232
observeValues: GetMaximumConnections, unit: "{connection}",
3333
description: "The maximum number of idle open connections allowed; this corresponds to MaximumPoolSize in the connection string.");
34-
ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.idle.min",
34+
_ = ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.idle.min",
3535
observeValues: GetMinimumConnections, unit: "{connection}",
3636
description: "The minimum number of idle open connections allowed; this corresponds to MinimumPoolSize in the connection string.");
37-
ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.max",
37+
_ = ActivitySourceHelper.Meter.CreateObservableUpDownCounter<int>("db.client.connections.max",
3838
observeValues: GetMaximumConnections, unit: "{connection}",
3939
description: "The maximum number of open connections allowed; this corresponds to MaximumPoolSize in the connection string.");
4040

src/MySqlConnector/Core/NormalizedSchema.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@ internal sealed partial class NormalizedSchema
1717
private static readonly Regex s_nameRegex = new(ReName, RegexOptions.Compiled);
1818
#endif
1919

20-
public static NormalizedSchema MustNormalize(string name, string? defaultSchema = null)
21-
{
22-
var normalized = new NormalizedSchema(name, defaultSchema);
23-
if (normalized.Component is null)
24-
throw new ArgumentException("Could not determine function/procedure name", nameof(name));
25-
if (normalized.Schema is null)
26-
throw new ArgumentException("Could not determine schema", nameof(defaultSchema));
27-
return normalized;
28-
}
20+
public static NormalizedSchema MustNormalize(string name, string? defaultSchema = null) =>
21+
new NormalizedSchema(name, defaultSchema) switch
22+
{
23+
{ Component: null } => throw new ArgumentException("Could not determine function/procedure name", nameof(name)),
24+
{ Schema: null } => throw new ArgumentException("Could not determine schema", nameof(defaultSchema)),
25+
{ } normalized => normalized,
26+
};
2927

3028
public NormalizedSchema(string name, string? defaultSchema = null)
3129
{

src/MySqlConnector/Core/ResultSet.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public async Task ReadResultSetHeaderAsync(IOBehavior ioBehavior)
159159
if (!Session.SupportsDeprecateEof)
160160
{
161161
payload = await Session.ReceiveReplyAsync(ioBehavior, CancellationToken.None).ConfigureAwait(false);
162-
EofPayload.Create(payload.Span);
162+
_ = EofPayload.Create(payload.Span);
163163
}
164164

165165
if (ColumnDefinitions.Length == (Command?.OutParameters?.Count + 1) && ColumnDefinitions[0].Name == SingleCommandPayloadCreator.OutParameterSentinelColumnName)
@@ -182,16 +182,13 @@ public async Task ReadResultSetHeaderAsync(IOBehavior ioBehavior)
182182
}
183183
}
184184

185-
private static bool IsHostVerified(MySqlConnection connection)
186-
{
187-
return connection.SslMode == MySqlSslMode.VerifyCA
188-
|| connection.SslMode == MySqlSslMode.VerifyFull;
189-
}
185+
private static bool IsHostVerified(MySqlConnection connection) =>
186+
connection.SslMode is MySqlSslMode.VerifyCA or MySqlSslMode.VerifyFull;
190187

191188
public async Task ReadEntireAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
192189
{
193190
while (State is ResultSetState.ReadingRows or ResultSetState.ReadResultSetHeader)
194-
await ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
191+
_ = await ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
195192
}
196193

197194
public bool Read()

src/MySqlConnector/Core/Row.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
using System.Runtime.CompilerServices;
21
using System.Runtime.InteropServices;
32
using System.Text;
43
using MySqlConnector.ColumnReaders;
54
using MySqlConnector.Protocol;
65
using MySqlConnector.Protocol.Serialization;
6+
#if !NETCOREAPP2_1_OR_GREATER && !NETSTANDARD2_1_OR_GREATER
77
using MySqlConnector.Utilities;
8+
#endif
89

910
namespace MySqlConnector.Core;
1011

@@ -30,7 +31,7 @@ public void SetData(ReadOnlyMemory<byte> data)
3031
Array.Clear(m_dataOffsetLengths, 0, m_dataOffsetLengths.Length);
3132
for (var column = 0; column < m_dataOffsetLengths.Length; column++)
3233
{
33-
if ((data.Span[(column + 2) / 8 + 1] & (1 << ((column + 2) % 8))) != 0)
34+
if ((data.Span[((column + 2) / 8) + 1] & (1 << ((column + 2) % 8))) != 0)
3435
{
3536
// column is NULL
3637
m_dataOffsetLengths[column] = (-1, 0);
@@ -40,7 +41,7 @@ public void SetData(ReadOnlyMemory<byte> data)
4041
var reader = new ByteArrayReader(data.Span);
4142

4243
// skip packet header (1 byte) and NULL bitmap (formula for length at https://dev.mysql.com/doc/internals/en/null-bitmap.html)
43-
reader.Offset += 1 + (m_dataOffsetLengths.Length + 7 + 2) / 8;
44+
reader.Offset += 1 + ((m_dataOffsetLengths.Length + 7 + 2) / 8);
4445
for (var column = 0; column < m_dataOffsetLengths.Length; column++)
4546
{
4647
if (m_dataOffsetLengths[column].Offset != -1)
@@ -341,7 +342,7 @@ public DateTime GetDateTime(int ordinal)
341342
return (DateTime) value;
342343
}
343344

344-
public DateTimeOffset GetDateTimeOffset(int ordinal) => new DateTimeOffset(DateTime.SpecifyKind(GetDateTime(ordinal), DateTimeKind.Utc));
345+
public DateTimeOffset GetDateTimeOffset(int ordinal) => new(DateTime.SpecifyKind(GetDateTime(ordinal), DateTimeKind.Utc));
345346

346347
public Stream GetStream(int ordinal)
347348
{
@@ -387,7 +388,7 @@ public float GetFloat(int ordinal)
387388
{
388389
float floatValue => floatValue,
389390
double doubleValue when doubleValue is >= float.MinValue and <= float.MaxValue => (float) doubleValue,
390-
double _ => throw new InvalidCastException("The value cannot be safely cast to Single."),
391+
double => throw new InvalidCastException("The value cannot be safely cast to Single."),
391392
decimal decimalValue => (float) decimalValue,
392393
_ => (float) value,
393394
};

src/MySqlConnector/Core/SchemaProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
#if NET6_0_OR_GREATER
12
using System.Globalization;
2-
using System.Text;
3+
#endif
34
using MySqlConnector.Protocol.Serialization;
45

56
namespace MySqlConnector.Core;
@@ -431,7 +432,7 @@ private async Task FillDataTableAsync(IOBehavior ioBehavior, DataTable dataTable
431432
while (await reader.ReadAsync(ioBehavior, cancellationToken).ConfigureAwait(false))
432433
{
433434
var rowValues = new object[dataTable.Columns.Count];
434-
reader.GetValues(rowValues);
435+
_ = reader.GetValues(rowValues);
435436
dataTable.Rows.Add(rowValues);
436437
}
437438
}

0 commit comments

Comments
 (0)