我正在使用 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/