2010-07-26 80 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