2017-03-18 81 views
0

我对这个问题的网络非常好,我只是画了一个空白,因为建议的一切都已经到位。LINQ to SQL not unicode

我有以下代码:

if (docid == 155) 
{ 
    docbody = "安全工作"; 

} 



var matchedContentBody = (from cb in dc.GetTable<tbl_content_body>() 
           where cb.c_id == docid 

          select cb).SingleOrDefault(); 

try 
{ 
    matchedContentBody.contentBody = docbody; 
    dc.SubmitChanges(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

领域contentBody是(而且一直)为nvarchar(最大)。当我读到这个数据时,在一个带有charset utf-8的网页上,我只看到了?

据我所知,Unicode字段类型否定了任何需要指出它是Unicode数据。

在此任何指导将不胜感激。

+0

您检查了您的dbml文件以确保类型是'nvarchar'吗? – dotctor

+0

是的,dbml说:[global :: System.Data.Linq.Mapping.ColumnAttribute(Storage =“_ contentBody”,DbType =“NVarChar(max)”,UpdateCheck = UpdateCheck.Never)] –

+0

如果我创建一个非常简单经典的ASP页面(UTF-8字符集)与原生的SQL和数据的文本区域,我可以将数据保存到数据库并正确显示回来。所以我认为DB上的字段可以处理Unicode。我正在努力的应用程序是一个Windows窗体应用程序(只是作为一个桌面实用程序,用于导入数据) –

回答

0

对于有这个问题的人......我的解决方案是将字符串数据转换为Unicode。不要问我为什么,但它确实有效。在我的代码中运行LINQ更新语句之前,我会对字符串数据执行此操作:

docbody = System.Text.UTF8Encoding.Default.GetString(System.Text.UTF8Encoding.UTF8.GetBytes(docbody)); 
+0

这真的很难阅读。使用'System.Text.Encoding.'来访问基类的静态成员。它也会消除多余的提及UTF8的情况。因此,'Encoding.Default.GetString(Encoding.UTF8.GetBytes(docbody))''。现在,我们可以看到非常可疑的使用'Encoding.Default'。 (我仍然对此感到厌烦。) –