Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 缓冲区不能为空_Vb.net_Gridview_Download - Fatal编程技术网

Vb.net 缓冲区不能为空

Vb.net 缓冲区不能为空,vb.net,gridview,download,Vb.net,Gridview,Download,我尝试从gridview下载文件。。我在数据库中保存文件,然后在网格视图中显示我尝试了这个 我将文件保存在数据库表中而不是文件夹中,所以我尝试下载文件 当我这样做的时候,这个文档是下载的,但是当我调试代码并检查这一行时出现了问题 Dim row=数据库存储结果表(0).行(i) 结果显示 docid document docname docextension 1014 System.Byte[] Book2.xlsx .xlsx 然后,当我

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

我将文件保存在数据库表中而不是文件夹中,所以我尝试下载文件

当我这样做的时候,这个文档是下载的,但是当我调试代码并检查这一行时出现了问题 Dim row=数据库存储结果表(0).行(i) 结果显示

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

然后,当我继续进行时,docname显示“1912218726836.xlsx”,并且文件下载已损坏

这两行代码一起是错误的:

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
之后,应始终进行
无任何内容的测试,这是您尚未完成的。您正在使用结果,就好像您确信将存在该类型的对象一样。如果您知道这一点,那么您应该使用
DirectCast
,而不是
TryCast

即使您确实知道引用不会指向其他类型的对象,并且您使用了
DirectCast
,但是如果您强制转换空引用,即
Nothing
,那么您仍然会得到
Nothing
。因此,首先需要确定
structDb.dstreult.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
编辑:如果列可为null,则需要首先测试行是否包含null,然后仅在存在以下数据时使用数据:

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())

    '...

请不要在发布问题后立即要求帮助。如果可以的话,我们会尽快解决的。我们都是志愿者,分散在世界各地不同的时区。没有人会因为那些毫无意义的评论而帮上忙,而这些评论本来是不会帮上忙的。看看这个问题的标题。这个问题得到解决了吗?如果是这样,要么接受解决问题的答案,要么添加自己的答案。如果您有不同的问题,请将其发布到新线程中。OKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?您是否认为
DBNull
会神奇地变成
Byte()
?显然,您有一个可为null的列,并且该列中的某些行包含null。当没有数据可供使用时,您预计会发生什么?如果没有数据,不要尝试使用数据。还有,你为什么不首先提供这些信息?这样可以节省一些浪费的时间。我将用更合适的代码片段更新我的答案。我尝试了你的答案检查更新的问题请@jmchilhinney