Вернуть 2 выходных параметра из функции C# - PullRequest
0 голосов
/ 20 апреля 2020

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

Но вот код C#:

public string stAnswer(int idFirst, int idSecond)
{
    try
    {
        sqlConnection = new SqlConnection(stConexion);
        sqlConnection.Open();

        sqlCommand = new SqlCommand("spConsultarPreguntas", sqlConnection);
        sqlCommand.CommandType = CommandType.StoredProcedure;

        sqlCommand.Parameters.Add(new SqlParameter("@Id_First", idFirst));
        sqlCommand.Parameters.Add(new SqlParameter("@Id_Second", idSecond));

        sqlParameter = new SqlParameter();
        sqlParameter.ParameterName = "@First_A";
        sqlParameter.SqlDbType = SqlDbType.VarChar;
        sqlParameter.Size = 50;
        sqlParameter.Direction = ParameterDirection.Output;

        sqlParameter1 = new SqlParameter();
        sqlParameter1.ParameterName = "@Second_A";
        sqlParameter1.SqlDbType = SqlDbType.VarChar;
        sqlParameter1.Size = 50;
        sqlParameter1.Direction = ParameterDirection.Output;

        sqlCommand.Parameters.Add(sqlParameter);
        sqlCommand.Parameters.Add(sqlParameter1);

        sqlCommand.ExecuteNonQuery();

        return sqlParameter.Value.ToString();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        sqlConnection.Close();
    }
}

I возвращаю sqlParameter значение, но у меня есть два параметра, как я могу вернуть два значения? В этом случае sqlParameter и sqlParameter1.

Может кто-нибудь мне помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Вы можете использовать C# класс Tuple для возврата нескольких значений из функции

public Tuple<string,string> stAnswer(int idFirst, int idSecond)
{
try
{
    sqlConnection = new SqlConnection(stConexion);
    sqlConnection.Open();

    sqlCommand = new SqlCommand("spConsultarPreguntas", sqlConnection);
    sqlCommand.CommandType = CommandType.StoredProcedure;

    sqlCommand.Parameters.Add(new SqlParameter("@Id_First", idFirst));
    sqlCommand.Parameters.Add(new SqlParameter("@Id_Second", idSecond));

    sqlParameter = new SqlParameter();
    sqlParameter.ParameterName = "@First_A";
    sqlParameter.SqlDbType = SqlDbType.VarChar;
    sqlParameter.Size = 50;
    sqlParameter.Direction = ParameterDirection.Output;

    sqlParameter1 = new SqlParameter();
    sqlParameter1.ParameterName = "@Second_A";
    sqlParameter1.SqlDbType = SqlDbType.VarChar;
    sqlParameter1.Size = 50;
    sqlParameter1.Direction = ParameterDirection.Output;

    sqlCommand.Parameters.Add(sqlParameter);
    sqlCommand.Parameters.Add(sqlParameter1);

    sqlCommand.ExecuteNonQuery();

    return Tuple.Create(sqlParameter.Value.ToString(),sqlParameter1.Value.ToString());
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    sqlConnection.Close();
}
}

, вы можете вызывать его как обычную функцию

 var tpl=stAnswer(idFirst,idSecond);

и получать значения в порядок, который вы вернули из кортежа var str1 = tpl.Item1; var str2 = tpl.Item2;

, но более лучшим подходом будет использование именованного кортежа, который был добавлен в C# 7

 public(string perameter1,string parameter2)stAnswer(int idFirst, int idSecond)
 { 
   parameter1=sqlParameter.Value.ToString();
   parameter2=sqlParameter1.Value.ToString();

   return(parameter1,parameter2);
 }

, а затем получение значений из кортежа по переменной имена, подобные этому

 var tuple=stAnswer(idFirst,idSecond);
 var val1=tuple.parameter1;
 var val2=tuple.parameter2;
0 голосов
/ 20 апреля 2020

C# имеет параметры "out", которые можно использовать для возврата нескольких значений. См

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...