Разное количество записей при выполнении запроса с сервера - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть запрос, который выполняется в базе данных 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...