我正在使用 c# SqlBulkCopy 功能来保存带有 UTF8 编码的多语言值的记录。我的数据库字段是'NVARCHAR(max)',我要保存的值是我多言语で我。但它保存为'???????' .有没有办法通过 SqlBulkCopy 保存这个确切的日语/多语言值。

row["ParameterValue"] = RegData.ParamValue;

我也调试并检查了上面的行。但是数据也完全高于线。在这一行之后我正在执行
bulkCopy.WriteToServer(dataTable);

(我已经尝试过使用简单的 db insert 并且它工作正常。但我有数百万条记录要一次保存。如此简单的 db insert 对我不利)

最佳答案

' ??????? ' 是我期望的结果:

select cast(N'我多言語で我' as varchar(max))

通过带有 NVARCHAR 列的新创建的 DataTable 插入到 string 列似乎对我有用...

如果您运行 SQL 探查器跟踪,您应该会看到一个 insert bulk ... 语句,其中包含用于批量数据集的数据类型(注意,您不会看到这些值)。

如果此字段和目标字段是正确的 NVARCHAR 类型,则可能发生了一些服务器端处理?

编辑:以下对我有用
    // insert code to create SqlConnection
    var dbName = string.Format("Test{0}", Environment.TickCount);
    var command = connection.CreateCommand();
    command.CommandText = string.Format("create database {0}", dbName);
    command.ExecuteNonQuery();
    command.CommandText = string.Format("use {0}", dbName);
    command.ExecuteNonQuery();
    try
    {
        command.CommandText = "create table Test (Value nvarchar(max))";
        command.ExecuteNonQuery();

        var dataTable = new DataTable();
        dataTable.Columns.Add("Value", typeof(string));

        var row = dataTable.NewRow();
        row["Value"] = "我多言語で我";
        dataTable.Rows.Add(row);

        var sqlBulkCopy = new SqlBulkCopy(connection);
        sqlBulkCopy.DestinationTableName = "Test";
        sqlBulkCopy.WriteToServer(dataTable);

        Console.WriteLine("Please check the following query:");
        Console.WriteLine(string.Format("select * from {0}..Test", dbName));
        Console.ReadKey();
    }
    finally
    {
        command.CommandText = string.Format("drop database {0}", dbName);
        command.ExecuteNonQuery();
    }

关于c# - SqlBulkCopy Unicode/UTF8 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23868934/

10-13 05:03