CommandText

Свойство предоставляет или устанавливает текущее значение текста SQL-запроса.

Если в свойстве CommandType указано, что должна выполняться хранимая процедура, то в свойстве CommandText надо задать только имя этой процедуры (в этом случае выполнение процедуры инициируется методом Execute), иначе в свойстве CommandText надо задать ключевое слово CALL или EXECUTE < имя процедуры >(< параметры >).

Декларация
public abstract string CommandText {get; set;};

CommandText – текст SQL-запроса, заканчивающийся символом «;» (или пакета SQL-запросов, разделенных символом ;).

Значение свойства

Строка типа System.String с текстом SQL-запроса. Если свойство не установлено, возвращается пустая строка ("").

Исключения

Отсутствуют.

Примеры

1) Выполнение запроса вставки записи в таблицу.

// C#
using System;
using System.Data;
using System.Data.Common;

class CommandTextSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;Data Source=LOCAL";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    // Формирование текста SQL-запроса
    cmd.CommandText =
      "insert into auto (make,model,personid) values ('Ford','Focus',1111)";
    // Выполнение SQL-запроса
    int rowsAffected = cmd.ExecuteNonQuery();
    Console.WriteLine("Количество обработанных строк: {0}", rowsAffected);
    // Освобождение ресурсов
    con.Close();
  }
}

2) Выполнение запроса создания таблицы.

// C#
using System;
using System.Data;
using System.Data.Common;

class CommandTextSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;Data Source=LOCAL";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    // Формирование текста SQL-запроса
    cmd.CommandText = "create table test (test_name varchar(70))";
    // Выполнение SQL-запроса
    cmd.ExecuteNonQuery();
    // Освобождение ресурсов
    con.Close();
  }
}

3) Выполнение хранимой процедуры.

// C#
using System;
using System.Data;
using System.Data.Common;

class CommandTextSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;Data Source=LOCAL";
    con.Open();
    // Создание входного параметра хранимой процедуры
    DbParameter par = factory.CreateParameter();
    par.ParameterName = "name";
    par.Direction = ParameterDirection.Input;
    par.DbType = DbType.String;
    par.Size = 66;
    par.Value = "test_cursor";
    // Создание команды для выполнения хранимой процедуры
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "p_ret_cursor"; // имя хранимой процедуры
    cmd.Parameters.Add(par);
    cmd.Prepare();
    // Выполнение хранимой процедуры, возвращающей курсор
    DbDataReader reader = cmd.ExecuteReader();
    // Обработка полученных данных
    while (reader.Read())
    {
      Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
    }
    // Освобождение ресурсов
    reader.Close();
    con.Close();
  }
}

Примечание

Если в хранимой процедуре есть параметр типа BLOB, то вызов такой хранимой процедуры надо сделать из другой хранимой процедуры.

create or replace table tab1 (a int, b blob);

insert into tab1 (a, b) values (1, hex('010203'));
create or replace procedure proc1(in b blob)
  result int
code
  return blob_size(b);
end;
create or replace procedure proc2(in a int)
  result int
declare
  var b blob;
code
  execute direct "select b from tab1 where a = " + itoa(a) into b;
  return proc1(b);
end;
// C#
using System;
using System.Data;
using System.Data.Common;
class CommandTextSample
{
  static void Main()
  {
    DbConnection con = null;
    try
    {
      DbProviderFactory factory =
        DbProviderFactories.GetFactory("System.Data.LinterClient");
      con = factory.CreateConnection();
      con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8";
      con.Open();
      DbCommand cmd = factory.CreateCommand();
      cmd.Connection = con;
      cmd.CommandText = "call proc2(1);";
      object a = cmd.ExecuteScalar();
      Console.WriteLine(a);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Ошибка: " + ex.Message);
    }
    finally
    {
      if (con != null)
      {
        con.Close();
      }
    }
  }
}

4) Выполнение пакета SQL-запросов.

// C#
using System;
using System.Data;
using System.Data.Common;

class CreateCommandSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;Data Source=LOCAL";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    // Формирование пакета SQL-запросов
    cmd.CommandText = "select make from auto;select name from person";
    // Выполнение пакета SQL-запросов
    DbDataReader reader = cmd.ExecuteReader();
    // Обработка результатов пакета запросов
    while (reader.HasRows)
    {
      while (reader.Read())
      {
        Console.WriteLine(reader[0]);
      }
      // Перемещение к следующему запросу в пакете
      reader.NextResult();
    }
    // Освобождение ресурсов
    reader.Close();
    con.Close();
  }
}