SqlBulkCopy Unicode / UTF8错误

时间:2014-05-26 11:20:40

标签: c# special-characters sqlbulkcopy nvarchar

我正在使用c#SqlBulkCopy功能来保存具有UTF8编码多语言值的记录。我的数据库字段是' NVARCHAR(最大)'我被保存的价值是我多言语で我。但它正在节省作为' ???????' 。有没有办法通过SqlBulkCopy保存这个确切的日语/多语种值。

row["ParameterValue"] = RegData.ParamValue;

我调试了&检查上面的行也。但数据上线也完全没问题。在这行之后我正在执行

bulkCopy.WriteToServer(dataTable);

(我试过这个简单的db insert&它的工作正常。但我有一百万条记录一次保存。所以简单的数据库插入对我来说不好)

1 个答案:

答案 0 :(得分:2)

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

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

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

如果运行SQL事件探查器跟踪,您应该看到一个insert bulk ...语句,其数据类型用于批量数据集(n.b。您将看不到值)。

如果这个和目标字段是正确的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();
    }