“无法将值NULL插入列...”在将散列值插入列时出现SqlException

时间:2015-03-27 18:32:20

标签: c# .net sql-server hash sqlexception

我正在尝试将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行

请告诉我为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是一个SQL错误,因此请检查存储过程,因为您尝试在“密码”列中插入空值。 同时检查您的程序是否有任何触发器,或者是否正在调用其他程序,以及是否通过触发器或被调用程序进行插入。