SSIS OLE DB 目标不插入重音字符

SSIS OLE DB Destination not inserting accented characters

我有以下 table :

CREATE TABLE DI_Simulation 
(
    [city] nvarchar(255), 
    [profession] nvarchar(255) 
);

我使用脚本任务从 URL 加载数据,我在其中创建了 class Simulation 并添加了两个字符串属性。然后我反序列化下载的 JSON 数据并创建输出行。

我指定输出列 cityprofession 的类型为 DT_WSTR 但后面的字符 [é,à,è,...] 总是被替换.. .

我在两列上尝试了不同的归类,但没有看到任何变化。我还尝试在脚本任务上强制进行 UTF8 转换,但这也没有用。

有什么建议吗?

EDIT:我还应该提到我还有其他 tables 可以正确插入,但是这个特别有这个问题,我是认为脚本任务与它有关。

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

// Convert json string to .net object using the old school JavaScriptSerializer class
string Uri = "https://....";
JavaScriptSerializer serialize = new JavaScriptSerializer
{
    MaxJsonLength = Int32.MaxValue,
};

var simulation = serialize.Deserialize<Simulation[]>(DownloadJson(Uri));

编辑 2:

WebClient client = new WebClient();
Stream stream = client.OpenRead(Url);
StreamReader streamreader = new StreamReader(stream, System.Text.Encoding.GetEncoding(1252));
var ags = streamreader.ReadToEnd();

/*System.IO.File.WriteAllText(@"C:\Users\hhamdani\Desktop\Data Integration Objetcs\simulation_data.json",
ags,
System.Text.Encoding.GetEncoding(1252));*/
var simulation = serialize.Deserialize<Simulation[]>(ags);

我没有使用 DownloadJson 下载,而是使用 streamreader 从 URL 获取 Json 数据并强制编码,当我将数据保存在 txt 文件中时,它是很好,但在数据库上也是同样的问题。

根据我的复制从脚本源组件工作正常

设置

Table创作

一个简单的 table 有两列

CREATE TABLE dbo.[SO_71842511] (
    [TestCase] int,
    [SomeText] nvarchar(50)
)

SCR 做 Unicode

证明我们可以从脚本源将 unicode 字符注入数据流任务。

将脚本任务定义为源。向输出添加 2 列,一个 int,一个 DT_WSTR

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    public override void CreateNewOutputRows()
    {
        Output0Buffer.AddRow();
        Output0Buffer.SomeText = "e e plain";
        Output0Buffer.TestCase = 0;

        Output0Buffer.AddRow();
        Output0Buffer.SomeText = "é e forward";
        Output0Buffer.TestCase = 1;

        Output0Buffer.AddRow();
        Output0Buffer.SomeText = "à a back";
        Output0Buffer.TestCase = 2;

        Output0Buffer.AddRow();
        Output0Buffer.SomeText = "è e backward";
        Output0Buffer.TestCase = 3;
    }
}

结果

WebClient client = new WebClient();
Stream stream = client.OpenRead(Url);
StreamReader streamreader = new StreamReader(stream, System.Text.Encoding.UTF8);
var ags = streamreader.ReadToEnd();

这对我有用。 谢谢@billinkc