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(); } }