@hidden_pingvin

Как в C# осуществить передачу параметров в запрос массивом?

Здравствуйте. Знатоки, подскажите, как в C# по аналогии с PHP сделать передачу параметров в sql-запрос ассоциативным массивом дабы сделать универсальную функцию? Очень уж громоздко получается на C# без этого.
Вот пример на php:
function db_query($query, $params = array(), $options = array())
    {      //Запрос к БД, где query: текст запроса, params: значения полей или параметры
        global $handle;
        $handle = $this->db_connect('forum');
        $resource = $handle->prepare($query, $options);
        $resource->setFetchMode(PDO::FETCH_ASSOC);
        $resource->execute($params);
        return $resource;
    }
function insert($params = array(), $query = 'INSERT INTO user(login, pass, email, status) values(:login, :password, :email, 2)') {          
        $resource = $this->db_query($query, $params);
        return $this->db_last_insert_id();
    }


Вот пример на C#
public int Insert(int id, string name, string desc, int orderStatusChange)
        {
            id = 0;
            int count = 0;
            Models.DTO.Request request = new Models.DTO.Request();
            using (OracleConnection connection = new OracleConnection(Service1.CONNECTION_STRING))
            {
                connection.Open();
                OracleCommand oraCommand = new OracleCommand("INSERT INTO system.request (request_id, request_name, description, request_status_change_id) "
                                                            + " VALUES (request_seq.NEXTVAL, :req_name, :descr, :orderStatusChange);", connection);

                oraCommand.Parameters.Add("req_name", name);
                oraCommand.Parameters.Add("descr", desc);
                oraCommand.Parameters.Add("orderStatusChange", orderStatusChange);
                count = oraCommand.ExecuteNonQuery();
            }
            return count;
  • Вопрос задан
  • 335 просмотров
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
Можно или через массив входных параметров
public int Insert(params string[] strParams)
{ 
   var id = strParams[0];
   var name = strParams[1];
...
}

Или через словарь
public int Insert(Dictionary<string, string> args)
{ 
  foreach(var kv in args)
  {
      oraCommand.Parameters.Add(kv.Key, kv.Value);
  }
...
}
Ответ написан
Комментировать
@PushMeNow
.NET Developer
На самом деле всё ограничивается только вашей фантазией =) Я, например, почти всегда пишу примерно такую функцию:
public void ExcecuteQuery(string query, IEnumerable<OracleParameter> param = null, string connectionString = null)
using(OracleConnection connection = new OracleConnection(connectionString  ?? defaultConn))
			using(OracleCommand cmd = connection.CreateCommand())
			{
				cmd.CommandText = query;
				if (param != null)
				{
					foreach (OracleParameter ora in param)
					{
						cmd.Parameters.Add(ora);
					}
				}
				try
				{
					connection.Open();
				}
				catch (OracleException) { return;  }
				try
				{
					cmd.ExecuteNonQuery();
				}
				catch(OracleException e)
				{
				}
				finally { connection.Close(); }
			}

Разумеется она может меняться в зависимости от ситуации. Однако для большинства задач эта функция подходит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы