Вызов хранимой процедуры Firebird (embedded)
От: DemAS http://demas.me
Дата: 15.11.05 07:58
Оценка:
Добрый день.

1. Вот такая хранимая процедура:

а)

        ALTER PROCEDURE PRODUCTGROUP_INSERT2 (
            ORD INTEGER,
            NAME VARCHAR(30))
        AS
            begin
                INSERT INTO productgroup(name, ord) values(:name, :ord);
                suspend;
             end


с помощью вот такого кода:

б)
            FbConnection connection = GetConnection();
            connection.Open();
            FbCommand command = new FbCommand("productgroup_insert2", connection);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.Parameters.Add("@ord", FbDbType.Integer).Value = _productGroup.GetOrd();
            command.Parameters.Add("@name", FbDbType.VarChar).Value = _productGroup.GetName();
            //command.Parameters.Add("@description", FbDbType.VarChar).Value = _productGroup.GetDescription();            
            command.ExecuteNonQuery();
            connection.Close();


Вызывается без проблем.

2.

Теперь добавляю еще один параметр строкового типа:

а)
    ALTER PROCEDURE PRODUCTGROUP_INSERT2 (
      DESCRIPTION VARCHAR(150),
      ORD INTEGER,
      NAME VARCHAR(30))
    AS
     begin
      INSERT INTO productgroup(name, ord, description) values(:name, :ord, :description);
      suspend;
     end


Соответсвенно вызов:

б)

            FbConnection connection = GetConnection();
            connection.Open();
            FbCommand command = new FbCommand("productgroup_insert2", connection);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.Parameters.Add("@ord", FbDbType.Integer).Value = _productGroup.GetOrd();
            command.Parameters.Add("@name", FbDbType.VarChar).Value = _productGroup.GetName();
            command.Parameters.Add("@description", FbDbType.VarChar).Value = _productGroup.GetDescription();
            command.ExecuteNonQuery(); // (*)
            connection.Close();


Вызывает ошибку на строке(*):

        Input string was not in a correct format.


Чтобы убедиться что длина строки в процедуре соответсвует длине поля привожу описание таблицы:

        CREATE GENERATOR PRODUCTGROUP_GEN;
        
CREATE TABLE PRODUCTGROUP (
    PRODUCTGROUP_ID  INTEGER NOT NULL,
    ORD              INTEGER NOT NULL,
    NAME             VARCHAR(30) NOT NULL,
    DESCRIPTION      VARCHAR(150),
    PATH             VARCHAR(100)
);


ALTER TABLE PRODUCTGROUP ADD CONSTRAINT PK_PRODUCTGROUP PRIMARY KEY (PRODUCTGROUP_ID);

CREATE UNIQUE INDEX PRODUCTGROUP_NAME_IDX1 ON PRODUCTGROUP (NAME);
CREATE UNIQUE INDEX PRODUCTGROUP_ORD_IDX1 ON PRODUCTGROUP (ORD);

CREATE TRIGGER PRODUCTGROUP_BI0 FOR PRODUCTGROUP
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (New.ProductGroup_ID is null) then
    New.ProductGroup_ID = Gen_Id(ProductGroup_Gen, 1);
end



Вызов процедуры через execute procedure работает.

Что посоветуете ?

Заранее благодарен.
... << RSDN@Home 1.2.0 alpha rev. 602>>
Re: Вызов хранимой процедуры Firebird (embedded)
От: ovphome  
Дата: 15.11.05 08:56
Оценка: 4 (1)
"DemAS" <6865@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1488263@news.rsdn.ru...

Теперь добавляю еще один параметр строкового типа:

а)
ALTER PROCEDURE PRODUCTGROUP_INSERT2 (
DESCRIPTION VARCHAR(150),
ORD INTEGER,
NAME VARCHAR(30))
AS
begin
INSERT INTO productgroup(name, ord, description) values(:name, :ord, :description);
suspend;
end


Соответсвенно вызов:

б)

FbConnection connection = GetConnection();
connection.Open();
FbCommand command = new FbCommand("productgroup_insert2", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.Add("@ord", FbDbType.Integer).Value = _productGroup.GetOrd();
command.Parameters.Add("@name", FbDbType.VarChar).Value = _productGroup.GetName();
command.Parameters.Add("@description", FbDbType.VarChar).Value = _productGroup.GetDescription();
command.ExecuteNonQuery(); // (*)
connection.Close();


Вызывает ошибку на строке(*):

Input string was not in a correct format.



Что посоветуете ?



Обратить внимание на порядок параметров.

Олег
Posted via RSDN NNTP Server 1.9
Re[2]: Вызов хранимой процедуры Firebird (embedded)
От: DemAS http://demas.me
Дата: 17.11.05 08:13
Оценка:
Здравствуйте, ovphome, Вы писали:

O>Обратить внимание на порядок параметров.



Спасибо. Помогло. Хотя странно, я же обращаюсь к параметрам по имени, а не по индексу.
... << RSDN@Home 1.2.0 alpha rev. 581>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.