首页 > 解决方案 > 单击按钮时出错:System.InvalidCastException:'无法将'System.Int32'类型的对象转换为'System.Byte []'类型。

问题描述

我在代码中的这一行出现错误:

[bytes = DirectCast(sdr("MedicalCertificateID"), Byte())]

你知道出了什么问题吗?

  Protected Sub btnDownload_Click(sender As Object, e As EventArgs)

        Dim MedicalCertificateID As Integer = Integer.Parse(TryCast(sender, LinkButton).CommandArgument)
        Dim bytes As Byte()
        Dim fileName As String, contentType As String

        Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("##").ConnectionString)

            Using cmd As New SqlCommand("SELECT * FROM tblMedicalResults WHERE MedicalCertificateID  = @MedicalCertificateID", conn)

                cmd.Parameters.AddWithValue("@MedicalCertificateID", MedicalCertificateID)

                conn.Open()
                Using sdr As SqlDataReader = cmd.ExecuteReader()
                    sdr.Read()
                    bytes = DirectCast(sdr("MedicalCertificateID"), Byte())

标签: asp.netvb.net

解决方案


如果您只需要将整数值转换为其字节表示,则只需一行代码

 Dim bytes As Byte() = BitConverter.GetBytes(MedicalCertificateID)

无需对数据库运行查询,因为变量MedicalCertificateID在 WHERE 语句中用于查找包含您要读回的值的 a 字段的记录。
如果要检查记录是否存在,则只需检查 sdr.Read 的返回值

Using sdr As SqlDataReader = cmd.ExecuteReader()
    if sdr.Read() Then 
       ' record exists....
    End If 
End using

推荐阅读