【发布时间】:2014-10-15 14:33:22
【问题描述】:
我需要确保从存储过程中获取正确的命名字段,并且我找到的所有示例都通过索引而不是名称访问读取器对象。如何确保从存储过程中返回的字段是绝对正确的字段。
rdrLogon = myCommand.ExecuteReader()
If rdrLogon.HasRows Then
While rdrLogon.Read()
'userID
If rdrLogon(0) Is DBNull.Value Then
userID = "NULL"
Else
userID = Convert.ToString(rdrLogon(0))
End If
而不是 rdrLogon(0) 或 (1) 我想使用名称?有人告诉我使用 ExecuteScalar,但我找不到引用字段名称的适当示例。 提前致谢。
这是对经典 asp 的转换,他们是如何做到的:
If Not RS_UserAdd.BOF or Not RS_UserAdd.EOF then
rspCk=(RS_UserAdd.Fields.Item("userCk").Value)
End If
【问题讨论】:
-
我不确定你的问题,但你可以做
rdrLogon["YourFieldName"] -
我收到“预期标识符”语法错误,您确定吗?
-
存储过程返回的结果集的模式是否不确定?
-
@Jodrell 担心是合理的;事情可能会改变;例如 - 有人编辑 proc 并在中间添加一列(因为它与一些相关数据相关联);或者查询使用
*,在这种情况下,所有赌注都关闭。我什至知道多租户环境,其中列在不同数据库上的顺序不同,具体取决于该列是否已改装到现有数据库(显然是最后一列),而不是在香草中创建数据库(它可能会处于更“自然”的位置) -
@MarcGravell,我同意它更灵活,只要不更改列名。我想你可以检查已知的别名。 (事实上,我想我在十多年前就写过一些类似的代码。)
标签: .net vb.net stored-procedures