2012-05-15 122 views
0

我的查詢是這樣的:插入俄語數據到數據庫從數組

string str = string.Format("Insert into [MyDB].[dbo].[tlb1] ([file_path],[CONTENT1],[CONTENT2]) values ('{0}','{1}','{2}');", fullpath, _val[0], _val[1]); 

現在,當我將數據插入到數據庫中,如果array _val[]包含英語語言它正確地插入數據,但是當數組包含在俄語中的數據數據庫這個節目像??????????????????????? 有沒有辦法從數組中插入俄語數據。

+0

你插入的數據庫字段的類型是什麼? – phg

+0

你使用哪個數據庫?什麼代碼頁爲這個領域選擇? – gabba

+0

DataBase版本:Microsoft SQL Server 2005和字段是nvarchar(最大) – Manish

回答

1

首先,你應該使用預處理語句,讓數據庫驅動程序插入佔位符正確(即帶參數SqlCommand)。那麼問題應該消失(以及任何潛在的SQL注入問題)。

作爲一個快速解決你的情況:前綴你與N插入字符串文字:

... values (N'{0}',N'{1}',N'{2}') 

這會導致文字是Unicode的文字,不是任意的遺留代碼頁的人,從而防止了從Unicode轉換到遺留代碼頁(這會導致無法表示的字符的問號)。

+0

謝謝你的回答:) – Manish

0

似乎列[Content1][Content2]的數據類型是nchar。您應該將列轉換爲用於存儲unicode數據的nvarchar

+0

列的數據類型是nvarchar而不是nchar – Manish

+0

然後嘗試檢查您的服務器/數據庫的排序規則。更多信息在這裏http://msdn.microsoft.com/en-us/library/ms143726(v=sql.90).aspx – RePierre

0

首先,您必須在服務器上看到數據庫代碼頁。可能是數據庫中的非Unicode CP,但應用程序中的數據採用Unicode格式。

+1

沒有nvarchar列的代碼頁。 – Joey