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 数据并创建输出行。
我指定输出列 city
和 profession
的类型为 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
我有以下 table :
CREATE TABLE DI_Simulation
(
[city] nvarchar(255),
[profession] nvarchar(255)
);
我使用脚本任务从 URL 加载数据,我在其中创建了 class Simulation
并添加了两个字符串属性。然后我反序列化下载的 JSON 数据并创建输出行。
我指定输出列 city
和 profession
的类型为 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