Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(ASP.NET MVC4 C#)将UNICODE插入SQL Server_C#_Asp.net Mvc 4_Razor_Unicode - Fatal编程技术网

(ASP.NET MVC4 C#)将UNICODE插入SQL Server

(ASP.NET MVC4 C#)将UNICODE插入SQL Server,c#,asp.net-mvc-4,razor,unicode,C#,Asp.net Mvc 4,Razor,Unicode,我是asp.net mvc4新手,遇到了一个问题: 当我使用: [HttpPost] public ActionResult AddUser(USER user) { try { db.USERs.Add(user); db.SaveChanges(); return RedirectToAction("Index"); } catch

我是asp.net mvc4新手,遇到了一个问题:

当我使用:

    [HttpPost]
    public ActionResult AddUser(USER user)
    {
        try
        {
            db.USERs.Add(user);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return RedirectToAction("Failed");
        }

    }
db
是我的
实体
(或其他名称)

在类
USER
中,我有两个字符串属性:
username
fullname
nvarchar
~>用于存储unicode字符)

例如,当我输入
username='admin'和fullname='á'
(使用Razor生成的表单)时,检查SQL Server数据库中的记录,我应该看到
username='admin'和fullname='á'

但它会显示:
username='admin'和fullname='?'

My db使用排序规则:
Vietnamese\u CI\u AS

查询:

 INSERT INTO [USER] ("username", "fullname") 
 VALUES ('admin', N'á')
很好。我可以看到使用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
  • 当您创建ORM模型时,数据库列是
    varchar
    ,您还没有更新模型来告诉它现在是
    nvarchar
    ——因此模型正在使用它所知道的,并将参数添加为ANSI而不是unicode

请修复数据库列,或更新模型以告知该列为unicode。

该列是否定义为
varchar(…)
?或者是
nvarchar(…)
?这个问题与asp.net、razor或mvc没有任何关系;您能指出您使用的是什么数据访问工具吗?谢谢您的帮助^^但在我创建mvc项目之前,该栏是
nvarchar
。我正在使用
实体框架
。我在SQL Management studio中使用的查询只是为了确保我没有使用错误的排序规则,因此不会造成伤害,我猜^^@SeverusDark然后您需要检查EF配置,以确保它是unicode。老实说,这是默认设置:如果它不想通过ANSI,实际上需要非常努力地使其通过。