我正在使用c#SqlBulkCopy功能来保存具有UTF8编码多语言值的记录。我的数据库字段是' NVARCHAR(最大)'我被保存的价值是我多言语で我。但它正在节省作为' ???????' 。有没有办法通过SqlBulkCopy
保存这个确切的日语/多语种值。
row["ParameterValue"] = RegData.ParamValue;
我调试了&检查上面的行也。但数据上线也完全没问题。在这行之后我正在执行
bulkCopy.WriteToServer(dataTable);
(我试过这个简单的db insert&它的工作正常。但我有一百万条记录一次保存。所以简单的数据库插入对我来说不好)
答案 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();
}