У меня есть запрос, который выполняется в базе данных SQL Server. Я использую VPN для подключения к серверу базы данных. Я читаю результаты запроса, используя ADO .NET DataReader. Когда я выполняю код на своей локальной машине, я получаю все ожидаемые результаты, когда мой код запускается в производство на сервере Amazon с подключенным VPN, я получаю лишь несколько результатов.
Я использую .Net Core 2.2 и SqlСервер Microsoft SQL Server 2017
using (SqlConnection sqlConnection = new SqlConnection("connectionString"))
{
await sqlConnection.OpenAsync();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandText = "SELECT * FROM TestTable";
Int32 count = 0;
var dr = await command.ExecuteReaderAsync();
while (await dr.ReadAsync())
{
count++;
}
}
count должен быть общим числом строк TestTable (60 КБ), но он меньше.
Я также провел следующий тест:
using (SqlConnection sqlConnection = new SqlConnection("connectionString"))
{
await sqlConnection.OpenAsync();
SqlCommand commandCount = sqlConnection.CreateCommand();
commandCount.CommandText = "SELECT COUNT(*) FROM TestTable";
Int32 expectedCount = (Int32)commandCount.ExecuteScalar();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandText = "SELECT * FROM TestTable";
Int32 count = 0;
var dr = await command.ExecuteReaderAsync();
while (await dr.ReadAsync())
{
count++;
}
var areEqual = expectedCount == count;
}
Переменная areEqual должна иметь значение true, но она равна false, поскольку число всегда меньше ожидаемого значения. Ожидаемое количество равно 60 КБ, а количество равно 1 КБ. Эта проблема возникает только тогда, когда запрос выполняется на рабочем сервере. Я запускаю код в консольном приложении.
Я думаю, что есть проблема с подключением к базе данных, потому что, если утилизировать Datareader после прочтения всех результатов, я получаю следующее исключение:
System. .Data.SqlClient.SqlDataReader. Data.Common.DbDataReader.Dispose ()
РЕДАКТИРОВАТЬ: я пытался удалить асинхронные методы, но все равно получал те же результаты:
using (SqlConnection sqlConnection = new SqlConnection("connectionString"))
{
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandText = "SELECT * FROM TestTable";
Int32 count = 0;
var dr = command.ExecuteReader();
while (dr.Read())
{
count++;
}
}
РЕДАКТИРОВАТЬ 1: я пыталсятот же код, но с использованием полной .NET Framework 4.7.1 и получил те же неправильные результаты
РЕДАКТИРОВАТЬ2: Установлен SSMS на рабочем сервере, и при выполнении запроса я получаю следующую ошибку: Произошла ошибка при выполнении пакета. Сообщение об ошибке: Фатальная ошибка внутреннего соединения. Состояние ошибки: 15, токен: 48