【发布时间】:2019-06-01 05:52:43
【问题描述】:
我正在使用脚本任务从 sql 查询生成 json 文件。
脚本任务中的c#代码:
public void Main()
{
// TODO: Add your code here
ConnectionManager cm;
string sqlString = "";
System.IO.StreamWriter file = new System.IO.StreamWriter(@"f:\JSONOutput.txt");
sqlString = "SELECT * FROM[dbo].[JJVCACUProductElectron] where id in (1,2,3) for json auto";
System.Data.SqlClient.SqlConnection sqlConn;
System.Data.SqlClient.SqlCommand sqlComm;
cm = Dts.Connections["crm_vm_2017_cs_dotnet"];
sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);
sqlComm = new System.Data.SqlClient.SqlCommand(sqlString, sqlConn);
System.Data.SqlClient.SqlDataReader reader = sqlComm.ExecuteReader();
try
{
while (reader.Read())
{
file.WriteLine(reader[0]);
}
}
finally
{
// Always call Close when done reading.
reader.Close();
}
cm.ReleaseConnection(sqlConn);
Dts.TaskResult = (int)ScriptResults.Success;
}
生成的输出文件不完整,我猜有些列可能有返回。如何去除输出中的返回字符?
【问题讨论】:
-
“生成的输出文件不完整”是什么意思?你怎么知道它不完整。您需要跟踪您的代码并找出它从完整到不完整的位置。
-
你的代码写了多行。这是否意味着每行编写一个 JSON 实体?为了简化,首先只为一个记录
WHERE id = 1写JSON,看看是否有效 -
查询假设只返回一列一行的数据。我发现它实际上返回了带有 crlf 的数据,因此这可能会导致上述代码返回部分 json 数据。所以我在问如何从输出中删除crlf,所以输出变成一个没有crlf的字符串。
-
你检查过它只返回一列一行吗?该代码允许多行,SQL 显然是为了返回多行。你需要再次检查你得到了什么。
标签: c# json sql-server ssis etl