簡體   English   中英

不允許從數據類型nvarchar到二進制的隱式轉換。 使用CONVERT函數運行此查詢。

[英]Implicit conversion from data type nvarchar to binary is not allowed. Use the CONVERT function to run this query.

我在使用這段代碼時遇到了麻煩。 在我的數據庫中,我將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());

我相信你想改變這個:

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

嘗試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM