Я новичок в asp.net mvc4 и имею проблему:
когда я использую:
[HttpPost]
public ActionResult AddUser(USER user)
{
try
{
db.USERs.Add(user);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return RedirectToAction("Failed");
}
}
db
- это мои Entities
(или что-то еще)
в классе USER
меня есть 2 свойства строки: username
и fullname
username
(nvarchar
~> для хранения символов Unicode)
Например, когда я вводил username = 'admin' and fullname = 'á'
(используя форму, сгенерированную Razor), проверьте запись в базе данных SQL Server, я должен увидеть username = 'admin' and fullname = 'á'
Но это показывает: username = 'admin' and fullname = '?'
вместо.
Моя сортировка db: Vietnamese_CI_AS
Запрос:
INSERT INTO [USER] ("username", "fullname")
VALUES ('admin', N'á')
работал отлично. Я вижу, что данные INSERT
использующие mvc (db.USERs.Add(user)
), не позволяют мне помещать N 'перед строкой NVARCHAR
как запрос?
Кто-нибудь знает, как это исправить, пожалуйста, помогите мне??
Заранее спасибо!
Любой код доступа к данным никогда не должен записываться:
INSERT INTO [USER] ("username", "fullname")
VALUES ('admin', N'á')
потому что unicode в стороне, это просто риск инъекции SQL. Фактически ваш доступ к данным должен делать что-то вроде
INSERT INTO [USER] ("username", "fullname")
VALUES (@username, @fullname)
добавление параметров с этими значениями. Вы не разъясняете, какую технологию доступа к данным вы используете, но она выглядит как EF или LINQ-to-SQL, и в этом случае ORM получит это право. Все они знают все о unicode, и кроме того: по умолчанию (при добавлении параметра со строковым значением) нужно передать его как unicode. Вам действительно нужно сказать, чтобы он не делал unicode. Поэтому я должен заключить, что один из:
varchar
вместо nvarchar
varchar
когда вы создали модель ORM, и вы не обновили модель, чтобы сообщить ей, что она теперь nvarchar
- поэтому модель работает с тем, что она знает, и добавляет параметр как ANSI, а не unicodeЛибо исправьте столбец базы данных, либо обновите модель, чтобы сообщить, что столбец является юникодом.
nvarchar
прежде чем я создаю проект MVC. Я используюEntity Framework
. Запрос, который я использовал в SQL Management Studio, просто чтобы убедиться, что я не использую неправильную сортировку, так что это не вредно, я думаю ^^