【发布时间】:2019-11-29 21:52:47
【问题描述】:
我正在处理的一个大型项目存在问题。我以前从未遇到过这个问题,但它今天开始发生。有什么修复吗?
error: System.Data.SqlClient.SqlException: '数据类型 text 和 nvarchar 在等于运算符中不兼容。'
我不明白它是什么意思。我不想进行 sql 注入,所以我正在使用参数。但它仍然会出错。
如果您需要我描述一些事情,请问我...这就像我的第 5 篇文章。
using (SqlCommand StrQuer = new SqlCommand("SELECT * FROM login WHERE username=@userid AND password=@password", connection))
{
StrQuer.Parameters.AddWithValue("@userid", username.Text.ToLower().Trim());
StrQuer.Parameters.AddWithValue("@password", obf.Obfuscate(password.Text).ToString());
SqlDataReader dr = StrQuer.ExecuteReader();
if (dr.HasRows)
{
Properties.Settings.Default.username = username.Text.ToLower();
Properties.Settings.Default.username = obf.Obfuscate(password.Text);
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\howcoolitisX");
key.SetValue("username", username.Text.ToLower());
key.SetValue("password", obf.Obfuscate(password.Text));
key.Close();
Form executor = new Loader();
executor.Show();
this.Hide();
}
}
【问题讨论】:
-
忘了说!混淆函数只是做一个base64混淆
cs class Obfuscation { public string Obfuscate(string source) { return Convert.ToBase64String(Encoding.UTF8.GetBytes(source)).ToString(); } -
text数据类型不适用于密码,您应该将其更改为nvarchar。顺便说一句,base64 编码不提供任何安全性。 -
我知道。 Base64 解码器已上线。这不是我担心的。我担心 sql 不能在 atm 工作。但是你的意思是把它改成nvarchar,代码还是数据库?
-
我的意思是数据库。
-
Properties.Settings.Default.username = obf.Obfuscate(password.Text);???错字?还是强制用户将用户名设置为密码?