我在这段代码上遇到了麻烦。在我的数据库中,我将Passphase列设置为binary(20)。为了获得下面列出的代码,我正在学习一个教程,但是我做了很多调整以满足我的需求。我的问题是我不知道如何将密码存储为二进制而不是nvarchar。

如果这有所不同,则用于SQL Server的注册页面。

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString);
    con.Open();
    string insCmd = "Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country) VALUES (@AccountName,@Passphrase,@EmailAddress,@FullName,@Country)";
    SqlCommand insertUser = new SqlCommand(insCmd, con);
    insertUser.Parameters.AddWithValue("@AccountName", TextBoxUN.Text);
    insertUser.Parameters.AddWithValue("@Passphrase", TextBoxPass.Text);
    insertUser.Parameters.AddWithValue("@EmailAddress", TextBoxEA.Text);
    insertUser.Parameters.AddWithValue("@FullName", TextBoxFN.Text);
    insertUser.Parameters.AddWithValue("@Country", DropDownListCountry.SelectedItem.ToString());

最佳答案

我相信您要更改此设置:

insertUser.Parameters.AddWithValue("@Passphrase", TextBoxPass.Text);


对此:

insertUser.Parameters.AddWithValue("@Passphrase",
    Encoding.Default.GetBytes(TextBoxPass.Text));


此外,请遵守IDisposable界面。您上面的代码将更合适地编写为:

using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString))
{
    con.Open();
    string insCmd = "Insert into Accounts (AccountName, Passphrase, EmailAddress, FullName, Country) VALUES (@AccountName,@Passphrase,@EmailAddress,@FullName,@Country)";
    using (var insertUser = new SqlCommand(insCmd, con))
    {
        ...
    }
}

关于c# - 不允许从数据类型nvarchar隐式转换为二进制。使用CONVERT函数运行此查询。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21286661/

10-10 19:14