(ASP.NET MVC4 C #) Вставьте UNICODE в SQL Server

1

Я новичок в 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 как запрос?

Кто-нибудь знает, как это исправить, пожалуйста, помогите мне??

Заранее спасибо!

Теги:
razor
unicode
asp.net-mvc-4

1 ответ

0
Лучший ответ

Любой код доступа к данным никогда не должен записываться:

 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

Либо исправьте столбец базы данных, либо обновите модель, чтобы сообщить, что столбец является юникодом.

  • 0
    спасибо за помощь ^^ но колонка была nvarchar прежде чем я создаю проект MVC. Я использую Entity Framework . Запрос, который я использовал в SQL Management Studio, просто чтобы убедиться, что я не использую неправильную сортировку, так что это не вредно, я думаю ^^
  • 0
    @SeverusDark, тогда вам нужно проверить конфигурацию EF, чтобы убедиться, что это Unicode. Честно говоря, это по умолчанию: вам действительно нужно много работать, чтобы заставить его пройти ANSI, если он этого не хочет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню