2013-06-04 41 views
3

我有這個字符串,我想插入表:C#沒有轉化unicode字符串

string command = @" insert into " + txnDC.Connection.Database + "..[AZGetPackages] ([PackageID] , [PackageName] , [VendorID] , [VendorDisplayName] , [IsCustom] , [EPCustomerID])" + 
        @"values(N'1', N'Package 1', N'11', N'Vendor 1', N'0', N''), 
        (N'2', N'Package 2', N'12', N'Vendor 2', N'0', N''), 
        (N'3', N'Package 3', N'13', N'Vendor 3', N'0', N''), 
        (N'4', N'雑誌コード', N'14', N'稅込', N'0', N'')"; 

當我把一個斷點右邊的那條線後,我查看調試它顯示了這樣的字符串:

txnDC.ExecuteCommand(command, new object[0]); << breakpoint here to view command var 

和表演||爲中國的字符。

管道實際上是那些小矩形。

所以,當它插入到表中時,它會插入矩形字符而不是我設置的實際字符。

任何人有任何建議嗎?

謝謝!

+0

該字符串看起來像SQL,而不是C#。你能解釋一下,甚至可以編譯嗎? – Oded

+0

可能只是在停止在斷點處或用於查看數據庫表的應用程序中時,查看器中呈現字符的方式。您是否嘗試過將它們從數據庫中讀出並再次顯示在屏幕上? –

+0

更新並放置雙引號。 – user1013388

回答

0

好的,我不確定你在做什麼,但你會更好地使用參數化查詢。因此,也許這樣的事情(這是僞代碼,因此它需要修改編譯):

using (SqlConnection c = new SqlConnection("...")) 
{ 
    c.Open(); 
    using (SqlCommand cmd = new SqlCommand("INSERT INTO table (...) VALUES (@field1, ...)", c); 
    { 
     cmd.Parameters.AddWithValue("@field1", "稅込"); 
     cmd.Parameters[0].SqlDbType = SqlDbType.NVarChar; 

     cmd.ExecuteNonQuery(); 
    } 
} 
+0

感謝您的回覆。是的,我明白你的意思了,不幸的是,這個文件是由excel中的一個宏給我的,這個宏使用SQL N表示法生成,這應該可以工作。 – user1013388

+1

@ user1013388:字段「nvarchar」的基礎數據類型是什麼? –

+0

是的,數據類型是NVARCHAR – user1013388

1

我遇到別人的機器上完全相同的代碼和它的作品有預期,無任何變化。這似乎是我的系統上的顯示問題。發生的唯一不平常的事情是我在度假時離開了,離開了我的機器10天。我知道這可能是無關的,但它似乎已經做了一些與我的系統有關的字體。在我離開的時候,沒有人碰到我的機器,在我離開之前我沒有做任何與字體有關的東西。

但有一個轉折點,記事本不會顯示中文字符,VS調試器也不會顯示SQL SSMS網格結果視圖。但VS.CS文件字符串var def將和如果我粘貼到SSMS編輯器它也會顯示它們。

瘋了!

+0

我感到你的痛苦 - 我遇到了一個非常類似的問題,我花了很長時間試圖追蹤一個在我的開發PC上出現字體顯示問題的bug。它打破了一些應用程序而不是其他。我從來沒有深究過。 – RichieHindle