I have a String[] parameters that gets its values populated by calling another function GetParameter to grab parameters from a URL. I think I need to convert the other function to work async to ensure that the parameters are grabbed first before firing off the rest of the initial function (along with other parts of the method that I need to ensure are complete first).
private static string GetParameter(string url, stringParamName)
{
var indexQuery = url.IndexOf("?");
var indexParam = url.IndexOf(paramName);
return (indexQuery != -1 && indexParam != -1) ? HttpUtility.ParseQueryString(url).Get(paramName) : throw new Exception ("Missing query/parameter.");
}
private static void MainFunction()
{
var param1 = "test1";
var param2 = "test2";
var uncleanedUrl = "https://google.com/?test1=12345&test2=678901";
String[] parameters = { GetParameter(uncleanedUrl, param1), GetParameter(uncleanedUrl, param2) }; //Should be populated like {12345, 67890}
var validValues = new List<string>();
int[] expectedParamLength = { 5, 6 };
const string insertString =
"USE [MY DB] GO" +
"INSERT INTO [...]" +
"([Column 1], [Column 2], [Column 1+2])" +
"VALUES" +
"(@Column1, @Column2, @Column3) GO";
var connectionString = ""; //Connection string here
for (int i = 0; i < parameters.Length; i++)
{
var validValue = int.TryParse(parameters[i].Trim(), out int number); // Returns true if the onversion to an int was succesful
if (validValue && parameters[i].Length == expectedParamLength[i])
{
validValues.Add(parameters[i].Trim());
}
}
if (validValues.Count == parameters.Length) //is number of validated values same as number of parameters we checked
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand insertCommand = new SqlCommand(insertString))
{
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
insertCommand.Parameters.AddWithValue("@Column1", validValues[0]);
insertCommand.Parameters.AddWithValue("@Column2", validValues[1]);
insertCommand.Parameters.AddWithVAlue("@Column3", validValues[0] + validValues[1]);
connection.Open();
adapter.InsertCommand.ExecuteNonQuery();
}
}
}
}
}
I'm trying to follow along with this article on implementing a task but I'm not sure how to return a string HttpUtility.ParseQueryString(url).Get(paramName)from the task.
private static Task<string> GetParameter(string url, string paramName)
{
var returnedParameter = new TaskCompletionSource<string>();
GetParameter(url, paramName, success =>
{
returnedParameter.SetResult(success);
});
return HttpUtility.ParseQueryString(url).Get(paramName);
}