2013-06-04 40 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