如何在C#中通过SELECT获取SQL Server超1000行全量数据
解决C#中SqlDataAdapter仅返回1000行的问题
以下是几种排查和解决的方法:
1. 确保SqlCommand未设置最大返回行数
检查你的SqlCommand对象是否意外设置了MaxRecords属性,该属性默认值为0(表示无限制),如果被设置为1000就会导致只返回1000行。在创建命令后显式设置该属性:
SqlCommand command = new SqlCommand(sql_statement, conn); command.MaxRecords = 0; // 显式设置为无限制
2. 验证数据库账号权限一致性
确认C#代码中使用的数据库账号,和你在SSMS中执行查询的账号是同一个。不同账号可能因为行级安全策略、权限限制等原因,能访问的数据行数不同。
3. 改用SqlDataReader手动读取所有行
如果SqlDataAdapter的Fill方法仍然有问题,可以尝试直接使用SqlDataReader逐行读取并填充DataTable,这种方式更直观可控:
DataTable dataTable = new DataTable(); using (SqlConnection conn = new SqlConnection(connection_sql)) { conn.Open(); string sql_statement = "SELECT * FROM [Instances].[dbo].[BI_BIT]"; SqlCommand command = new SqlCommand(sql_statement, conn); command.MaxRecords = 0; using (SqlDataReader reader = command.ExecuteReader()) { dataTable.Load(reader); // 加载所有读取到的行 } }
4. 检查数据库端是否存在查询限制
有些数据库环境可能会对查询返回行数做全局限制(比如某些测试环境的配置),可以在SSMS中检查服务器配置中的"查询 governor 限制"、执行相关配置查询,确认没有全局行数限制。
内容的提问来源于stack exchange,提问作者Christian01
相关产品推荐
相关产品推荐

