【问题标题】:Failed to convert parameter value from a String to a Byte[]将参数值从 String 转换为 Byte[] 失败
【发布时间】:2018-05-20 06:41:33
【问题描述】:

net 代码,当我尝试以二进制格式插入字符串时,我遇到了这个问题。

我在 decal.DecalLogoFileName 中有二进制格式的图像,而 decal.DecalLogoFileName 定义了一个字符串,所以当我尝试作为

cmd.Parameters.Add(new SqlParameter("@DecalLogoFileName", SqlDbType.Binary)).Value=decal.DecalLogoFileName;

decal.DecalLogoFileName="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxITEhUTExIWFhUXGB8aGBcYGR0ZHxobGhoXHRcYGBkaHyghHRolHRcXIjEhJSkrLi4uGB8zODMtNygtLisBCgoKDg0OGhAQGy0lHyUtLS0tLS0tLS0tLS0tLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLf/AABEIALcBEwMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAEBQIDBgABB//EAEgQAAIBAgQDBQQHBQYDCAMAAAECEQADBBIhMQVBUQYTImFxMoGRoSNCUrHB0fAUcpLS4QczU2KCshVUc0Njg5OiwuLxFiRk/8QAGQEAAwEBAQAAAAAAAAAAAAAAAQIDAAQF/8QALBEAAgICAgECBQQCAwAAAAAAAAECERIhAzFBE2EiMlFxgUKhsdEEkSMzUv/aAAwDAQACEQMRAD8A"

我是贴花中的字符串值

function readURL(input) {
if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function (e) {
            $('#DecalLogo').attr('src', e.target.result);
            $('#hdImageName').val(e.target.result);
        }
        reader.readAsDataURL(input.files[0]);
    }
}

这里 hdImageName 值存储在 decal.DecalLogoFileName 中

我也试过

cmd.Parameters.Add(new SqlParameter("@DecalLogoFileName", SqlDbType.Binary)).Value=Convert.toByte(decal.DecalLogoFileName);

但是转换问题来了。

DecalLogoFileName 的列数据类型设置为 varbinary(MAX)

【问题讨论】:

    标签: c# asp.net ado.net varbinarymax


    【解决方案1】:

    这样试试;

    var byteArray = Encoding.ASCII.GetBytes(decal.DecalLogoFileName);
    cmd.Parameters.Add(new SqlParameter("@DecalLogoFileName", SqlDbType.VarBinary, byteArray.Length)).Value=byteArray;
    

    要从数据库中检索图像,您可以使用Encoding.ASCII.GetString(byteArray) 将其转换为base64 字符串。然后你可以像这样把图片放到img src中;

            <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxITEhUTExIWFhUXGB8aGBcYGR0ZHxobGhoXHRcYGBkaHyghHRolHRcXIjEhJSkrLi4uGB8zODMtNygtLisBCgoKDg0OGhAQGy0lHyUtLS0tLS0tLS0tLS0tLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLf/AABEIALcBEwMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAEBQIDBgABB//EAEgQAAIBAgQDBQQHBQYDCAMAAAECEQADBBIhMQVBUQYTImFxMoGRoSNCUrHB0fAUcpLS4QczU2KCshVUc0Njg5OiwuLxFiRk/8QAGQEAAwEBAQAAAAAAAAAAAAAAAQIDAAQF/8QALBEAAgICAgECBQQCAwAAAAAAAAECERIhAzFBE2EiMlFxgUKhsdEEkSMzUv/aAAwDAQACEQMRAD8A" 
            alt="SampleImage" />
    

    【讨论】:

    • decal.DecalLogoFileName 只有编码格式对吗?
    • 没关系。您必须将 base64string 转换为字节数组才能将二进制格式存储在表中。检索图像时应将二进制转换为 base64string。
    • 你能建议我如何从数据库中获取该格式并在用户端再次显示为图像
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多