Экспорт данных в хранилище озера данных Azure с пользовательским кодом в компоненте задачи «Сценарий» - PullRequest
0 голосов
/ 08 октября 2018

Мне нужна помощь.Я пытаюсь экспортировать данные в ADLS путем преобразования результирующего набора в поток.

Когда я пытаюсь сделать это с помощью консольного приложения, ошибка не выдается, но когда я интегрирую это с задачей Script, введите кодздесь компонент выдает ошибку во время выполнения.Кроме того, после добавления классов Azure точка останова не срабатывает при отладке.

using System;
using System.Threading;
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest.Azure.Authentication;
using System.IO;
using System.Data.SqlClient;
using System.Data;
using System.Text;

public class Program  {
private static string adlsAccountName;
private static string tblName = "tblGrid";
DataTable dataTable = new DataTable();

public byte[] datared()
{
    string connectionString = "Data Source=local;Initial Catalog=abc;Integrated Security=True";

    string query = "select * from " + tblName;

    SqlConnection conn = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand(query, conn);
    conn.Open();

    // create data adapter
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    // this will query your database and return the result to your datatable
    da.Fill(dataTable);
    conn.Close();
    da.Dispose();

    var a = Encoding.GetEncoding("iso-8859-1").GetBytes(ToByte(dataTable));
    return a;
}


public static string ToByte(DataTable table)
{
    var result = new StringBuilder();
    for (int i = 0; i < table.Columns.Count; i++)
    {
        result.Append(table.Columns[i].ColumnName);
        result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
    }

    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            result.Append(row[i].ToString());
            result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
        }
    }

    return result.ToString();
}



public static void Main()
{
    Program p = new Program();
    var bytes = p.datared();
    MemoryStream stream = new MemoryStream(bytes);

    // Name of the Azure Data Lake Store
    var  adlsAccountName = "testadls08";

    SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

    // Portal > Azure AD > Properties > Directory ID (aka Tenant ID)

    var domain = "177cfeea-xxxx-xxx-853d-xxxx";

    // Portal > Azure AD > App Registrations > App > Application ID (aka Client ID)

    var clientId = "0e499fed-7f23-4b19-98ab-xxxxx";

    // Portal > Azure AD > App Registrations > App > Settings > Keys (aka Client Secret)

    var clientSecret = "6xxxxxxxxxxxxxxxxxxxxxxxx=";

    var clientCredential = new ClientCredential(clientId, clientSecret);
    var creds = ApplicationTokenProvider.LoginSilentAsync(domain, clientCredential).Result;

    var filepath = "/shared/" + tblName + ".txt";
    var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
    adlsFileSystemClient.FileSystem.Create(adlsAccountName, filepath, overwrite: true);
    adlsFileSystemClient.FileSystem.Append(adlsAccountName, filepath, stream);
 }
}

Исключение было вызвано целью вызова.

в System.RuntimeMethodHandle.InvokeMethod (Цель объекта, Объект[] arguments, сигнатура sig, логический конструктор) в System.Reflection.RuntimeMethodInfo.

UnsafeInvokeInternal (параметры объекта obj, Object [], аргументы Object []) в System.Reflection.RuntimeMethodInfo.Invoke (объект obj,BindingFlags invokeAttr, Binder Binder, параметры Object [], CultureInfo culture) в System.RuntimeType.

InvokeMember (Строковое имя, BindingFlags bindingFlags, Binder Binder, Объектная цель, Object [] предоставил Args, ParameterModifier [] модификаторы, CultureInfoculture, String [] namedParams) в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript ()

...