【发布时间】:2021-07-13 22:18:42
【问题描述】:
我正在处理一个登录页面,该页面从文本字段中获取密码,然后单击按钮,将值与数据库进行比较,但是当我尝试使用 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 value, Type targetType, IFormatProvider provider)
InvalidCastException:无法将参数值从 String 转换为 Byte[]。 System.Data.SqlClient.SqlParameter.CoerceValue(object value, MetaType destinationType, out bool coercedToDataFeed, out bool typeChanged, bool allowStreaming)
【问题讨论】:
-
如果出现错误,则会有一条错误消息提供更多信息。将其添加到您的问题中。
-
@PresidentJamesK.Polk 我包含了错误
-
Convert.ToBase64String返回一个字符串。您的意思是使用pswBytes而不是byte64? -
与问题无关,但请注意,以这种方式存储密码被认为是不安全的。最好对密码进行哈希处理,这样就无法再发现原始密码。请参阅:cheatsheetseries.owasp.org/cheatsheets/… 和 cheatsheetseries.owasp.org/cheatsheets/…
-
感谢您分享这个@NickMuller!
标签: c# .net entity-framework