Мне нужна помощь.Я пытаюсь экспортировать данные в 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 ()