不允许从数据类型nvarchar到二进制的隐式转换。使用CONVERT函数运行此查询。

时间:2014-01-22 15:10:54

标签: c# asp.net sql visual-studio

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

这是针对SQL服务器的注册页面,如果这会产生影响。

    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());

2 个答案:

答案 0 :(得分:1)

我相信你想改变这个:

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))
    {
        ...
    }
}

答案 1 :(得分:1)

试试这个

 SqlParameter insertUser = new SqlParameter("@Passphrase",SqlDbType.Binary, 15);
 insertUser.Value = System.Text.Encoding.ASCII.GetBytes(TextBoxPass.Text);
 insCmd.Parameters.Add(insertUser);
相关问题