“ ”附近的语法不正确。在 sql 服务器中插入加密密码 (md5) 时出现异常?

Incorrect Syntax near ' '. Exception while inserting encrypted password (md5) in sql server?

我正在使用 md5 安全加密密码并将其存储到 asp.net 中的数据库中,但它给了我 ' ' 附近的语法错误异常。我使用 binary(16) 数据类型来存储加密密码。

query = "insert into accounts(email, password, user_type) output inserted.id values('" + clientBLL.email + "', " + clientBLL.password + ", 0);";
string accountId = DBManager.ExecuteScaler(query);

当我在密码周围加上单引号 " ' " + signIn.password + " ' " 它给了我 不允许从数据类型 varchar 到二进制的隐式转换。使用 CONVERT 函数来 运行 此查询 错误。 md5加密密码存入数据库怎么办

加密密码。

public static string encryptMd5(string textToEncrypt)
    {
        using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
        {
            md5.ComputeHash(Encoding.ASCII.GetBytes(textToEncrypt));
            byte[] result = md5.Hash;
            StringBuilder str = new StringBuilder();

            for (int i = 1; i < result.Length; i++)
            {
                str.Append(result[i].ToString("x2"));
            }

            return str.ToString();
        }
    }

请注意关于以这种方式生成 SQL 的极其糟糕的做法的评论。您当前的实施对 SQL 注入攻击敞开大门。而是遵循以下代码中的模式。

也就是说,异常告诉你使用 convert

    using (SqlCommand dbCommand = new SqlCommand(@"insert into accounts(email,  
                    password, user_type) output inserted.id 
                    values(@username, convert(varbinary, @password),
                    @userType)", dbConn))
    {

        dbCommand.Parameters.Add("username", SqlType.VarChar).Value = clientBLL.email;
        dbCommand.Parameters.Add("password", SqlType.VarBinary).Value = clientBLL.password;
        dbCommand.Parameters.Add("userType", SqlType.Int).Value = 0;
        dbCommand.ExecuteNonQuery();
    }