2010-07-26 44 views
2

我想将info.NativeName插入数据库的nvarchar字段。 它不工作,我得到的是???????编码不是西/拉丁文。如何在MS-SQL中插入unicode?

直接在page_onload的asp.net网站上输出listcultures工作正常,但它似乎不通过数据库工作。

Public Sub listcultures() 
    'Dim x As System.DateTime = DateTime.Now 
    'Response.Write(x.ToString("HH':'mm':'ss MMM d', 'yyy 'PST'", New System.Globalization.CultureInfo("zh-CN", False))) 
    Dim info As System.Globalization.CultureInfo 
    For Each info In System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures) 
     'Response.Write("Deutsch: " + info.DisplayName + " English: " + info.EnglishName + " Native: " + info.NativeName + " Name: " + info.Name + " Codepage: " + info.TextInfo.ANSICodePage.ToString() + "<br />") 

     'InsertData(info.DisplayName, info.EnglishName, info.NativeName, info.Name, info.TextInfo.ANSICodePage.ToString(), info.IsNeutralCulture.ToString()) 

     If Not info.IsNeutralCulture Then 
      'item.SubItems.Add(amount.ToString("C", info.NumberFormat)) 
      'item.SubItems.Add(dateNow.ToString("d", info.DateTimeFormat)) 
     End If 
    Next 

End Sub 

我在做什么错?我想有一些编码?

+0

此代码只包含评论的循环。 InsertData是做什么的?请显示CREATE TABLE语句 – devio 2010-07-26 11:51:51

回答

3
+0

Aaaaaaaaaaaaaaaaaargh。 INSERT N'MyString'而不是INSERT'MyString'。 N在u-Nicode中。谢谢 ! – 2010-07-26 12:13:54

+1

为了解决这个问题,表明OP没有参数化TSQL;这表明(IMO)**远** *更大*问题... – 2010-07-26 18:21:42

+0

@Marc Gravell:是的,但我只用localy创建本地化字符串的数据库。它不会在任何公共代码中,所以没有SQL注入的危险,并且我总是替换'with'。我以前见过N',但我不知道它代表unicode。 – 2010-07-26 21:59:56

0

究竟发生了什么?最终,你就在这里建立一个字符串,并存储到nvarchar,所以它应该做工精细,提供:

  • 你已经正确参数化的输入命令
  • 你有没有飞越的宽度列

我们真的不能说,更没有看到InsertData,我承担会谈到数据库。我也不是相当于当然,为什么一个“list”方法会插入呢?此外,因为目前所有内容都已被注释掉,所以我会期望什么也没有发生......

+0

好吧,list只是循环,插入发生在InsertData中,它在这里被注释掉了,但是我当然在没有注释的情况下运行它。我不会得到?????值,并结合正确的英文值,如果插入不起作用。 – 2010-07-26 12:38:56