(ASP.NET MVC4 C#)将UNICODE插入SQL Server
我是asp.net mvc4新手,遇到了一个问题: 当我使用:(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
[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
——因此模型正在使用它所知道的,并将参数添加为ANSI而不是unicodenvarchar
请修复数据库列,或更新模型以告知该列为unicode。该列是否定义为
varchar(…)
?或者是nvarchar(…)
?这个问题与asp.net、razor或mvc没有任何关系;您能指出您使用的是什么数据访问工具吗?谢谢您的帮助^^但在我创建mvc项目之前,该栏是nvarchar
。我正在使用实体框架
。我在SQL Management studio中使用的查询只是为了确保我没有使用错误的排序规则,因此不会造成伤害,我猜^^@SeverusDark然后您需要检查EF配置,以确保它是unicode。老实说,这是默认设置:如果它不想通过ANSI,实际上需要非常努力地使其通过。