ahmed_sa Ответов: 1

Ошибка параметра должны быть назначены до контроля выхода из текущего метода . Getinsertstatmenttext функция ?


Проблема
Ошибка параметра должны быть назначены до контроля выхода из текущего метода .
функция GetInsertStatmentText ниже возвращает полный оператор insert как показано ниже
INSERT INTO master_table(id, branch_id, name, address, phone) VALUES(@id, @branch_id, @name, @address, @phone);

в параметр мне нужно вернуться
@id, @branch_id, @name, @address, @phone

когда я добавляю параметр out в функцию, я получаю ошибку

Error  out parameter must be assigned before control leave current method

Как решить эту ошибку, пожалуйста ?

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

public static string GetInsertStatmentText(string JsonData,out  sqp)
        {
            string Insert = "";
            JObject jo = JObject.Parse(JsonData);
            JToken m = jo["master"];
            string connectionstring = "Server=AHMEDSALAH-PC\\SQL2014;Database=Atum;User Id=sa;Password=abc123;"; //change connection string
            using (SqlConnection connection = new SqlConnection(connectionstring))
            {
                using (SqlCommand command = new SqlCommand(JsonHelper.GetInsertStatement(m), connection))
                {
                    connection.Open();
                    List<SqlParameter> lsp = JsonHelper.GetSqlParams(jo["master"]);
                    foreach (SqlParameter sqp in lsp)
                        command.Parameters.Add(sqp);
                    Insert = command.CommandText;
                }
            }
            return Insert;

        }

1 Ответов

Рейтинг:
1

OriginalGriff

Существует разница между параметрами и локальными переменными.
Когда вы это сделаете:

foreach (SqlParameter sqp in lsp)
Вы создаете новую локальную переменную с тем же именем, что и параметр, и помещаете ее в область действия параметра. foreach блок.
В результате ваша функция никогда не присваивает значение параметру sqp - а так как он объявлен как out параметр система требует значение присваивается ему до завершения работы метода, независимо от того, какой путь он проходит через метод. Если какой-либо путь не присвоит значение, вы получите ошибку, и ваш код не будет компилироваться.


ahmed_sa

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

ahmed_sa

это означает, как решить эту ошибку или как изменить функцию, чтобы удалить эту ошибку

OriginalGriff

Присвоить значение sqp до того, как оно попадет в оператор return?

ahmed_sa

как я это делаю

OriginalGriff

Ты ведь шутишь, правда?

sqp = "...";
возврат вставка;

Что вы хотите вернуть, я понятия не имею - это ваше приложение, а не мое, и я понятия не имею, что вы пытаетесь сделать ...

ahmed_sa

не могли бы вы написать все функции после того, как вы поставите свою модификацию

MadMyche

.. так что, пожалуйста, перепишите весь мой код и исправьте мои ошибки?