首页 > 解决方案 > 无法将字符串转换为字节 []

问题描述

我正在处理从文本字段获取密码的登录页面,然后单击按钮将值与数据库进行比较,但是当我尝试使用 SqlDataReader 时,我收到错误,从字符串到字节 [] 的转换失败.

byte[] pswBytes = Encoding.ASCII.GetBytes(psw);
var byte64 = Convert.ToBase64String(pswBytes);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
    cmd.Parameters.Add("@email", SqlDbType.VarChar, 250).Value 
        = email;

    cmd.Parameters.Add("@psw", SqlDbType.VarBinary, byte64.Length).Value = byte64;

    con.Open();

    using (SqlDataReader reader = cmd.ExecuteReader())
    {}
}

数据库中的密码也是一个字节(64)。

错误是:

InvalidCastException:从“System.String”到“System.Byte[]”的无效转换。System.Convert.DefaultToType(IConvertible 值,类型 targetType,IFormatProvider 提供程序)

InvalidCastException:无法将参数值从 String 转换为 Byte[]。System.Data.SqlClient.SqlParameter.CoerceValue(对象值,MetaTypedestinationType,out bool coercedToDataFeed,out bool typeChanged,bool allowStreaming)

标签: c#.netentity-framework

解决方案


为什么要转换pswBytesstring? 当数据类型为二进制时,程序的输入数据类型必须是字节数组。

byte[] pswBytes = Encoding.ASCII.GetBytes(psw);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
   cmd.Parameters.Add("@email", SqlDbType.VarChar, 250).Value = email;
   cmd.Parameters.Add("@psw", SqlDbType.VarBinary, pswBytes.Length).Value = pswBytes;

   con.Open();

   using (SqlDataReader reader = cmd.ExecuteReader())
   {}
}

推荐阅读