c# - 无法将字符串转换为字节 []
问题描述
我正在处理从文本字段获取密码的登录页面,然后单击按钮将值与数据库进行比较,但是当我尝试使用 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)
解决方案
为什么要转换pswBytes
为string
? 当数据类型为二进制时,程序的输入数据类型必须是字节数组。
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())
{}
}
推荐阅读
- c - Having trouble concatenating first name and last name
- maven - 为什么 maven deploy 会生成额外的 jars
- amazon-web-services - Dockerfile - 将配置文件复制到适当的容器
- javascript - 调用数据键值的方法?
- bash - 在 bash 脚本中,如何遍历按日期排序的文件
- angular - NgxNotification 组件在生产构建中失败。角 7
- mips - MIPS - 如何在不使用转换指令的情况下将浮点输入转换为整数,并且只使用移位或旋转?
- html - CSS Submeu 出现在悬停时,但当我尝试转到子菜单时消失
- python-3.x - Bin 随机值使用 .cut() on 并将 bins 放入新的 Pandas 数据框列
- php - 循环 2 个数组并比较是否存在相等的值(未定义的偏移量)