c# - 从服务器执行查询时的记录数不同
问题描述
我有一个在 SQL Server 数据库上执行的查询。我使用 VPN 连接到数据库服务器。我正在使用 ADO .NET DataReader 读取查询结果。当我在本地机器上执行代码时,我得到了所有预期的结果,当我的代码在连接了 VPN 的亚马逊服务器中运行时,我只得到一些结果。
我正在使用 .Net Core 2.2 和 Sql Server 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 的总行数(60k),但它更低。
我还做了以下测试:
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,因为 count 总是低于 expectedCount。expectedCount 是 60k,count 是 1k。此问题仅在生产服务器中执行查询时发生。我在控制台应用程序中运行代码。
我认为与数据库的连接存在问题,因为如果在读取所有结果后处置 Datareader,我会得到以下异常:
System.InvalidOperationException:内部连接致命错误。
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)
在 System.Data.SqlClient.SqlDataReader.TryCloseInternal(布尔 closeReader)
在 System.Data.SqlClient。 SqlDataReader.Close()
在 System.Data.SqlClient.SqlDataReader.Dispose(Boolean disposing)
在 System.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
解决方案
推荐阅读
- python - 使用 python 是否可以修改并可能在 csv 中添加新行?
- python - FileNotFoundError: [WinError 3] 系统找不到指定路径:'C:\\Users\\ASUS\\Desktop\\Opencv Course\\Faces\\train\\Madoona'
- r - DPLYR Left_Join 返回 NA 值
- python - BAST 和 FAST 算法
- javascript - 如何比较 2 个对象数组并在 Javascript 中返回单个数组结果?
- javascript - 如何理解“这样的绑定只定义一次,永不改变”这句话?
- python - Pandas:对列的子集应用过滤器
- php - 如何缩小或提高 laravel 8 刀片模板的速度?
- javascript - Vuejs - 焦点元素检查
- android - 如何从sqlite数据库中的日期数据中提取日期和月份