Как я могу получить значение из метода, который я вызвал? C # - PullRequest
0 голосов
/ 03 июля 2018

Я хочу получить значение строки из метода, который я вызвал, поэтому я смогу создать список, используя InnerHtml.

Вот пример кода.

protected void Button1_Click(object sender, EventArgs e)
{
    //MailBorrow();
    int count = 0;
    string[] names = new string[30];
    SqlCommand cmdgetnames = new SqlCommand("SELECT Distinct[names] FROM Employees", MyConN);
    using (SqlDataReader ReadeR = cmdgetnames.ExecuteReader())
        while (ReadeR.Read())
        {
            names[count] = ReadeR[0].ToString();
            count++;
        }
    foreach (string person in names)
    {
        Method(person);
        Sample.InnerHtml += **INEEDTHISBACK**;
    }
}
private void Method(string person)
{
    string html = "<h2>"+ person +",</h2>";
    SqlCommand cmdgetforPM = new SqlCommand("SELECT [tools] FROM Equipment WHERE owner = '" + person + "'", MyConN);
    using (SqlDataReader ReadeR = cmdgetforPM.ExecuteReader())
        while (ReadeR.Read())
        {
           html+= "<p>"+ Reader[tools].ToString() +"</p><br />"
        }
    **INEEDTHISBACK** = html;
}

Я новичок здесь, пожалуйста, дайте мне несколько советов, если вы считаете, что мое кодирование плохое. Спасибо! : -)

Ответы [ 5 ]

0 голосов
/ 03 июля 2018

Другим решением является использование параметра out.

0 голосов
/ 03 июля 2018

Методы имеют тип возврата. В настоящее время ваш метод использует void, что ничего не значит. Замените его на string и верните html с ключевым словом return.

Пожалуйста, прочтите следующую документацию по ключевому слову return в C #.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/return

0 голосов
/ 03 июля 2018

Сначала измените сигнатуру вашего метода для возврата строки

 private string Method(string person)
    {
        string html = "<h2>"+ person +",</h2>";
        SqlCommand cmdgetforPM = new SqlCommand("SELECT [tools] FROM Equipment WHERE owner = '" + person + "'", MyConN);
        using (SqlDataReader ReadeR = cmdgetforPM.ExecuteReader())
            while (ReadeR.Read())
            {
               html+= "<p>"+ Reader[tools].ToString() +"</p><br />"
            }
        return html;
    }

затем используйте его:

Sample.InnerHtml += Method(person);
0 голосов
/ 03 июля 2018

Может ли передать его в другой метод?

Class.MyMethod(html);

Ваш метод:

public static string MyMethod(string input)
{
    // do whatever here
    return input;
}
0 голосов
/ 03 июля 2018

Почему бы и нет? Измените тип возвращаемого значения на string и верните сгенерированное вами значение. Еще несколько вещей, которые вы должны отметить здесь,

  • Выполнение SQL-запроса: - Вы выбрали худший метод для выполнения запроса. Используйте параметризацию для выполнения таких составных запросов.
  • Используйте вместо StringBuilder для строки

Модифицированный метод будет выглядеть следующим образом:

private string Method(string person)
{
    StringBuilder htmlBuilder = new StringBuilder();
    string querySql ="SELECT [tools] FROM Equipment WHERE owner = @person"; 
    using (SqlCommand cmdSql = new SqlCommand(querySql, conObject))
    {
        cmdSql.Parameters.Add("@person", SqlDbType.VarChar).Value = person;
        using (SqlDataReader reader = cmdSql.ExecuteReader())
        {               
            htmlBuilder.Append("<h2>"+ person +",</h2>");
            while (reader.Read())
            {
                htmlBuilder.Append("<p>"+ reader[tools].ToString() +"</p><br />");
            }
        }
     }
     return htmlBuilder.ToString();
}

В методе Calling вы также можете использовать stringBuilder вместо строки и, следовательно, избежать непрерывного изменения текста innetHtml. Изменения в вызывающем методе таковы:

StringBuilder innerHtml = new StringBuilder();
foreach (string person in names)
{        
    innerHtml.Append(Method(person));
}
Sample.InnerHtml = innerHtml.ToString();
...