Добрый день.
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>>
"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
Здравствуйте, ovphome, Вы писали:
O>Обратить внимание на порядок параметров.
Спасибо. Помогло. Хотя странно, я же обращаюсь к параметрам по имени, а не по индексу.

... << RSDN@Home 1.2.0 alpha rev. 581>>