Параметризованный запрос вставки со значением метода - PullRequest
0 голосов
/ 24 октября 2018

У меня есть два метода.Когда я вызываю метод glass, мне нужно вставить значение в запрос.Как я могу вставить значение метода в запрос?

Я работаю с MVC, C # и SQL Server.

Код, который я пробовал: в этом методе вызовите метод glas

RController re = new RController();
re.Glas(C_E);
string insert = "INSERT INTO dbo.MEP (R1) VALUES (@code)";

using (SqlCommand command = new SqlCommand(insert, con))
{
    command.Parameters.AddWithValue("@code", "HERE METHOD GLAS");
    con.Open();
    int result = command.ExecuteNonQuery();
}

Метод GLAS возвращает строку.Эта строка - то, что мне нужно вставить в запрос.Запрос находится в другом методе контроллера (Rcontroller).

public void GLAS(string C_E)
{
     // more code
     if (i > 0)
     {
          string glas1 =  "OK";
     }
     else
     {
          string glas1 = "Fail"; 
     }
}

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Чтобы уточнить эту тему, у вас есть несколько вариантов.Некоторые из них уже разработаны.Существуют следующие подходы: Add, AddWithValue и целый набор параметров.Это обеспечивает гибкость, но вы также упоминаете, чтобы вернуть значение.

Таким образом, чтобы приблизиться к исходному аспекту параметра.

  • Добавить: Вы определяете параметр, тип в SQL и значение.Это облегчает потенциальные проблемы с базой данных.Вы передаете значение, которое является целым числом, но SQL считает, что оно должно быть десятичным, как определено.

  • AddWithValue: SQL автоматически выведет тип, просто передаст значение и параметр.

  • Сбор параметров: Вы заранее определяете все свои параметры, а затем просто переходите к своему SqlCommand.

Примером метода будет:

открытый класс DatabaseContext: IDbRepository {приватная строка только для чтения dbConnection;

 public DatabaseContext(IConfiguration configuration) => dbConnection = configuration.GetConnectionString("dbConnection");

 public bool Insert(string query, params SqlParameter[] parameters)
 {
      // If no parameters, then you really are not inserting.  Handle exception.

      using(var connection = new SqlConnection(dbConnection))
           using(var command = new SqlCommand(connection, query))
           {
                connection.Open();
                command.Parameters.AddRange(parameters);
                return (command.ExecuteNonQuery() > 0);
           }
 }

Так что по сути вы бы вызваливаш контекст, передать запрос, параметры, а затем выполнить ваш запрос.Но он возвращает логическое значение, а не условную проверку для определения успеха или неудачи.Когда вы звоните, вы знаете, что это удалось, поэтому вы могли бы вернуть действительный код состояния, т. Е. HttpStatusCode.Ok.

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

0 голосов
/ 24 октября 2018

Ваш текущий метод void и не возвращает никакого значения.Вы можете передать значение по ссылке или просто изменить свой метод на возвращаемое значение:

public string GLAS(string C_E)
{
     //more code
     string glas1 = "OK"; 
     if (i > 0)
     {
          glas1 =  "OK";
     }
     else
     {
          glas1 = "Fail"; 
     }
     return glas1;
}

Затем вы можете использовать его следующим образом:

command.Parameters.AddWithValue("@code", GLAS(C_E));

Кроме того, рекомендуется не делатьиспользуйте .AddWithValue и вместо этого вы можете использовать Parameters.Add() как:

command.Parameters.Add("@code", SqlDbType.VarChar).Value = GLAS(C_E);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...