3

我有这个要插入到表中的字符串:

 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

并显示 || 对于中文字符。

管道实际上是那些小矩形。

因此,当它插入表格时,它会插入矩形字符,而不是我设置的实际字符。

有人在这里有什么建议吗?

谢谢!

4

2 回答 2

1

我在别人的机器上运行了完全相同的代码,它按预期工作,没有任何变化。这似乎是我系统上的显示问题。发生的唯一不寻常的事情是我去度假了,我的机器关闭了 10 天。我知道这可能无关紧要,但它似乎对我的系统做了一些与字体相关的事情。在我离开的时候没有人碰我的机器,在我离开之前我也没有做任何与字体相关的事情。

但是有一个转折点,记事本不会显示中文字符,VS 调试器也不会,SQL SSMS 网格结果视图也不会。但是 VS .CS 文件字符串 var def 会,如果我粘贴到 SSMS 编辑器中,它也会显示它们。

疯狂的!

于 2013-06-04T21:37:30.467 回答
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();
    }
}
于 2013-06-04T19:29:18.127 回答