【问题标题】:Web Service returning a null dataset occasionallyWeb 服务偶尔返回空数据集
【发布时间】:2011-10-17 13:08:01
【问题描述】:

我遇到了最令人沮丧的问题,基本上我有一个网站和一个 Web 服务在同一台服务器上运行。两者都使用 ADO.net 使用我自己创建的几个自定义调用连接到数据表,该网站从来没有遇到连接到特定 proc 以返回数据的问题,但是 web 服务,据说每 100 次调用一次proc,返回一个空数据集,即使它应该返回填充并在 SQL Mgmt Studio 中的查询中执行。奇怪的是它在大多数情况下都有效,但偶尔会返回此错误:

System.IndexOutOfRangeException:在 System.Data.DataTableCollection.get_Item(Int32 索引)处找不到表 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

【问题讨论】:

    标签: web-services ado.net dataset


    【解决方案1】:

    执行此操作的一种方法是捕获抛出的异常,但更好的方法是在您的情况下检查nullnothing

    不要访问索引ds.Tables(0)...。 在像这样访问之前检查您的数据集 ds 是否为 null

    If ds IsNot Nothing then
      'only then can you index ds.
    end if
    

    通过这种方式,您可以避免查找数据集的索引,因为它包含一些有效的参考。在您的方法中,您访问的 Tables(0) 可能存在也可能不存在,如果没有有效检查,您的代码可能会引发异常,在这种情况下它有!

    【讨论】:

    • 嗨 JonH,我同意,但问题是即使没有返回行,它仍应返回一个表。就像网络服务/数据连接以某种方式断开,但每 100-150 次调用只有一次。
    • 大卫,我不能告诉你为什么,但你仍然应该进行错误检查。它没有从表中提取数据的结果,您将不得不使用分析器或其他一些工具来了解它为什么不回来。这可能只是时间问题..这些问题很难解决,不管怎样,祝你好运。
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多