"Cannot insert the value NULL into column..." 向列中插入散列值时出现 SqlException
"Cannot insert the value NULL into column..." SqlException while inserting a hashed value into the column
我正在尝试将 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;
}
}
当我检查通过 com
对象传递给 selectInt()
方法的 password
参数的值时,它显示正确的散列值,如 -32xxxx。
但我仍然收到此错误:
Cannot insert the value NULL into column 'Password', table 'Accounts';
column does not allow nulls. INSERT fails. Line 17
请告诉我为什么会这样?
这是一个 SQL 错误,因此请检查您的存储过程,因为您正试图在 'Password' 列中插入空值。
还要检查您的过程是否有任何触发器,或者它是否正在调用其他过程,以及插入是通过触发器还是被调用的过程进行的。
我正在尝试将 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;
}
}
当我检查通过 com
对象传递给 selectInt()
方法的 password
参数的值时,它显示正确的散列值,如 -32xxxx。
但我仍然收到此错误:
Cannot insert the value NULL into column 'Password', table 'Accounts'; column does not allow nulls. INSERT fails. Line 17
请告诉我为什么会这样?
这是一个 SQL 错误,因此请检查您的存储过程,因为您正试图在 'Password' 列中插入空值。 还要检查您的过程是否有任何触发器,或者它是否正在调用其他过程,以及插入是通过触发器还是被调用的过程进行的。