Member 12586110 Ответов: 1

Как использовать переменную SSIS вне метода main() в задаче сценария SSIS


Привет, я пытаюсь ссылаться на переменную, объявленную в методе Main() в задаче сценария SSIS, в другом методе.

public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {      
        public void Main()
        {
            try
            {
                var user = Dts.Variables["User::usr"].Value.ToString(); 
		var code = Dts.Variables["User::pwd"].Value.ToString();              
            }

            catch (Exception e)
            {
                // catch exception
            }
        }

        private class getItem
        {
            public string url = "http://localhost:1234/api/item";
			
			using (var client = new System.Net.Http.HttpClient())
            {
                // HTTP POST
                client.BaseAddress = new Uri("baseUrl");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response =  client.GetAsync("/item/GetAllItems").Result;
                string res = "";
                using (HttpContent content = response.Content)
                {
                    // Read string.
                    Task<string> result =  content.ReadAsStringAsync();
                    res = result.Result;
                }
            }	

            private httpRequest cr(string uri, string webMethod = "GET", byte[] data = null, string contentType = "application/json", bool isAuth = false)
            {
                var reqid = httpRequest.Create(uri);

                if (isAuth)
                {
                    var hruser = user; // trying to pass user from Main() method
                    var hrcode = code; // trying to pass code from Main() method
                    var authString = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", user, code)));
                    reqid.Headers.Add("Authorization", "Basic " + authString);
                }

                return reqid;
            }
		}
    }


Что я уже пробовал:

Я попытался использовать конструктор, но все равно столкнулся с ошибкой "ссылка на объект не установлена на экземпляр объекта".

public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {  
     string user;
     string code;
   
        public void Main()
        {
            try
            {
                user = Dts.Variables["User::usr"].Value.ToString(); 
		code = Dts.Variables["User::pwd"].Value.ToString();              
            }

            catch (Exception e)
            {
                // catch exception
            }
        }

        private class getItem
        {
            public string url = "http://localhost:1234/api/item";

            string User;
            string Code;

            public getItem(string user, string code)
            {
               User = user;
               Code = code;
            }
			
			using (var client = new System.Net.Http.HttpClient())
            {
                // HTTP POST
                client.BaseAddress = new Uri("baseUrl");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response =  client.GetAsync("/item/GetAllItems").Result;
                string res = "";
                using (HttpContent content = response.Content)
                {
                    // Read string.
                    Task<string> result =  content.ReadAsStringAsync();
                    res = result.Result;
                }
            }	

            private httpRequest cr(string uri, string webMethod = "GET", byte[] data = null, string contentType = "application/json", bool isAuth = false)
            {
                var reqid = httpRequest.Create(uri);

                if (isAuth)
                {
                    var hruser = User; // trying to pass user from Main() method
                    var hrcode = Code; // trying to pass code from Main() method
                    var authString = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", user, code)));
                    reqid.Headers.Add("Authorization", "Basic " + authString);
                }

                return reqid;
            }
		}

      public string getItemDesc()
        {
            getItem gi = new getItem(user, code); //pass user, code?
            string uri = gi.BaseUrl;

            HttpStatusCode statuscode;

            string idesc = gi.httpRequest(uri, out statuscode, isSecured: true);
            if (statuscode != HttpStatusCode.OK) throw new ApplicationException("error");
            return idesc;
        }
    }

Gerry Schmitz

Знаете ли вы разницу между частными и публичными полями / свойствами?

1 Ответов

Рейтинг:
1

Member 12586110

Привет Джерри

Спасибо за ваш ответ. Спецификатор частного или публичного доступа основан на том, как он может быть доступен в программе.

Я приношу извинения, если мой ответ будет расплывчатым, поскольку я все еще пытаюсь промочить ноги, понимая нюансы программы C#.

С уважением