我正在尝试将Murmur3哈希值插入nvarchar
列。
这是我的代码:
public int createUserAccount(string email, string password)
{
try
{
using (SqlCommand com = new SqlCommand("[dbo].[CreateUserAccount]"))
{
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@email", email.Trim().ToLower());
int HashedPass = HashAlgorithms.Murmur3.Murmur3_1.Hash(
new System.IO.MemoryStream(Utility.GetBytes(password)));
com.Parameters.AddWithValue("@password", HashedPass.ToString());
com.Parameters.AddWithValue("@appId", appId);
return selectInt(com);
}
}
catch (Exception)
{
return -1;
}
}
int selectInt(SqlCommand com)
{
try
{
using (SqlConnection con = new SqlConnection(connectionString))
{
com.Connection = con;
con.Open();
object o = com.ExecuteScalar();
con.Close();
if (o != null)
{
return int.Parse(o.ToString());
}
else
{
return 0;
}
}
}
catch (Exception e)
{
throw e;
}
}
当我检查通过password
对象传递给com
方法的selectInt()
参数的值时,它显示正确的散列值,如-32xxxx。
但我仍然得到这个错误:
无法将值NULL插入列'密码',表'帐户&#39 ;; 列不允许空值。 INSERT失败。第17行
请告诉我为什么会这样?
答案 0 :(得分:1)
这是一个SQL错误,因此请检查存储过程,因为您尝试在“密码”列中插入空值。 同时检查您的程序是否有任何触发器,或者是否正在调用其他程序,以及是否通过触发器或被调用程序进行插入。