我遇到了最令人沮丧的问题,基本上我有一个网站和一个在同一台服务器上运行的网络服务。两者都使用ADO.net连接数据表,使用我自己创建的几个自定义调用,网站从未遇到过连接到特定proc以返回数据的问题,但是webservice,曾经说过每100个调用一次proc,返回一个空的数据集,即使它应该已经填充回来并在SQL Mgmt Studio的查询中执行。奇怪的是它大多数时候都有效,但在奇怪的情况下会返回这个错误:
System.IndexOutOfRangeException:在System.Data.DataTableCollection.get_Item(Int32 index)中找不到表0.
Dim SQLCmd As SqlCommand = CreateSPCommand("VerifyCredentialsSP")
SQLCmd.Parameters.AddWithValue("@Password", Credentials.Password)
GetData(SQLCmd)
ds.DataSetName = "Customer"
If ds.Tables(0) IsNot Nothing Then
ds.Tables(0).TableName = "Customer"
End If
答案 0 :(得分:0)
执行此操作的一种方法是捕获抛出的异常,但更好的方法是在您的情况下检查null
或nothing
。
不要访问索引ds.Tables(0)...
。
在访问数据集之前检查数据集ds
是否为null
,如下所示:
If ds IsNot Nothing then
'only then can you index ds.
end if
这样,您可以避免查找数据集的索引,因为它包含一些有效的引用。在您的方法中,您正在访问可能存在或可能不存在的Tables(0)
,如果没有有效的检查,您的代码可能会抛出异常,在这种情况下它会有!