【发布时间】:2023-03-20 16:10:01
【问题描述】:
我正在使用 asp.net (webforms) 和 C# 设计一个网站。我有一个有 23 列的表。
在下面的代码中,reader 是一个 SqlDataReader,而 command 是一个 SqlCommand 对象。我正在使用以下代码从中输出查询结果:
command.CommandText = "SELECT * FROM devices WHERE device_level='" + ACCESS_LVL + "'" + "ORDER BY device_name";
reader = command.ExecuteReader();
然后我使用
循环遍历它while(reader.Read());
输出结果。
但是访问某些列会导致索引超出范围异常(索引超过 17)。我的表有 23 列,但 reader.FieldCount 只返回 18。
调试代码时,我的本地计算机上没有发生此问题。只有当我将项目上传到我的网络服务器时才会发生这种情况。
使用 mylittleadmin 数据库管理面板(安装在远程服务器上)我可以看到所有 23 列。
【问题讨论】:
-
请学习参数化你的 SQL。
"WHERE device_level='" + ACCESS_LVL + "'"对注入开放,需要尽快更改。 -
你也不应该使用
SELECT *,而是列出你明确期望的列 -
这很清楚地表明您的两个数据库在这些表中没有相同的列。
-
不可能使用相同的查询在同一个数据库上查询同一张表并得到不同的列。
-
@SeanLange 如果您将其作为两个不同的登录名进行查询,并且存在特定于登录名的对象(意思是:两个不同架构中的对象 - 可能是
abolfa.devices和dbo.devices),则可以这样做
标签: c# asp.net sql-server sqldatareader