缓冲区不能为空

时间:2017-01-17 06:53:42

标签: vb.net gridview download

我尝试从gridview下载文件..我将文件保存在数据库中然后我在网格视图中显示我试试这个

我将数据库表中的文件保存在文件夹中,因此我尝试下载文件

当我这个文件下载但是当我调试代码并检查然后在这一行中有问题  Dim row = db_stu.dResult.Tables(0).Rows(i) dResult节目

   docid     document       docname     docextension
    1014    System.Byte[]   Book2.xlsx  .xlsx

然后当我进一步继续docname shows" 1912218726836.xlsx"这个以及文件下载为损坏的

1 个答案:

答案 0 :(得分:1)

这两行合在一起是错误的:

Dim binary() As Byte = TryCast(structDb.dstResult.Tables(0).Rows(i).Item("document"), Byte())
Dim ms As MemoryStream = New MemoryStream(binary)

使用TryCast的原因是您尝试投射的对象可能不是您尝试将其投射的类型。在这种情况下,TryCast将返回Nothing。使用TryCast时,应始终对Nothing进行测试,但您尚未完成此项测试。您正在使用结果,就好像您确定会有该类型的对象一样。如果你知道那么你应该使用DirectCast而不是TryCast

即使您确实知道引用不是针对不同类型的对象而您使用DirectCast,但是如果您转换为空引用,即Nothing,那么您可以使用Nothing。仍然会回到structDb.dstResult.Tables(0).Rows(i).Item("document")。因此,首先需要确定Byte()是否可以引用DirectCast以外的类型的对象。如果它不能使用TryCast而不是Nothing。无论哪种方式,该表达式似乎都会产生Nothing,因此您需要以任何方式检查Dim binary() As Byte = TryCast(structDb.dstResult.Tables(0).Rows(i).Item("document"), Byte()) If binary IsNot Nothing Then Dim ms As MemoryStream = New MemoryStream(binary) '... End If ,例如。

Dim row = structDb.dstResult.Tables(0).Rows(i)

If Not row.IsNull("document") Then
    'There is data so go ahead and use it.
    Dim binary = DirectCast(row("document"), Byte())

    '...

编辑:如果列可以为空,那么您需要首先测试该行是否包含null,然后仅在有一些数据时使用该数据:

    <div class="container-fluid">
  <button type="button" class="btn btn-info" [routerLink]="['editor/text-properties']">
    <object type="image/svg+xml" data="assets/svg/cv_text.svg" class="svg"></object>  
  </button>
  <button type="button" class="btn btn-info" [routerLink]="['editor/image-properties']">
    <object type="image/svg+xml" data="assets/svg/cv_image.svg" class="svg"></object>  
  </button>
  <button type="button" class="btn btn-info" [routerLink]="['editor/background-properties']">
    <object type="image" data="assets/svg/cv_photo.svg" class="svg"></object>  
  </button>
  <button type="button" class="btn btn-info" [routerLink]="['editor/background-properties']">
    <span class="glyphicon glyphicon-photo svg"></span>
  </button>
</div>