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