c# - SqlBulkCopy Unicode/UTF8 错误

标签 c# special-characters sqlbulkcopy nvarchar

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

row["ParameterValue"] = RegData.ParamValue;

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

bulkCopy.WriteToServer(dataTable);

(我用简单的数据库插入试过了,它工作正常。但是我有数百万条记录要一次保存。所以简单的数据库插入对我来说不好)

最佳答案

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

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

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

如果您运行 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/

相关文章:

unicode - Unicode有没有特殊的标记符?

c# - C#中StrLikeText()方法如何比较 '#'的字符串?

c# - 在生产应用程序中使用 SqlBulkInsert

sql - 外键列允许 SQL Server 中的 0 进行批量插入

c# - 在 TFS API 中,如何获取给定测试的完整类名?

c# - 我的 Winforms 编码方法是老派的吗

swift - 将字符串中的重音字符替换为基本字符 - ą -> a , ć -> c

sql-server-2008 - SQLBulkCopy 与目标表中的标识插入

c# - C# 中的 NFA/DFA 实现

c# - 编译中的声明捕获阶段