![](/img/trans.png)
[英]Implicit conversion from data type sql_variant to varbinary(max) is not allowed. Use the CONVERT function to run this query. ASP.NET SQL DataSource
[英]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.