我正在使用asp.net(webforms)和C#设计一个网站。我有一个包含23列的表。

在下面的代码中,readerSqlDataReader,命令是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。

调试代码时,我的本地计算机上没有发生此问题。仅当我将项目上传到Web服务器时才会发生。

使用mylittleadmin数据库管理面板(安装在远程服务器上),我可以看到所有23列。

最佳答案

SQL Server在这里将是正确的。如果SELECT * FROM devices ...返回18列,则:连接到的数据库上的devices对象:有18列。听起来您已经让架构在不同的环境/数据库之间分散。或者:您可能有多个登录名和特定于登录名的对象(即同一数据库中两个不同数据库模式中的对象),因此:在查询时,您会看到一个对象为devices-以及当您查询它作为应用程序帐户,您看到一个不同的对象。通常,这将是dbo.devices vs abolfa.devices(例如)。

关于c# - SqlDataReader没有正确的列数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53522998/

10-11 01:01