On 10/11/05, Carlos Guzmán Álvarez <[EMAIL PROTECTED]> wrote:
I
sent some zips through, not sure if they made it. Here is a class and
the ddl for the database. I'm still completely stumped by this.Hello:
> I'm probably going to kick myself when i know what's wrong, but i
> can't find it anywhere. I'm not even sure if the return value is the
> problem, or the value being sent.
Ok could you send to me a test case that reproduces the problem please ??
public class ParameterTest
{
public ParameterTest()
{
}
public int TestParameter()
{
string name = "Test";
string code = "TT";
int currencyID = 5;
int id = 0;
bool isPercentage = false;
FbConnection conn = new FbConnection("User=SYSDBA;Password=masterkey;Database=C:\\Data\\PARAMETERTEST.fdb;DataSource=localhost;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0");
FbCommand com = new FbCommand("IndexTInsert", conn);
com.CommandType = CommandType.StoredProcedure;
FbParameter param;
param = new FbParameter("@Name", FbDbType.VarChar);
param.Value = name;
com.Parameters.Add(param);
param = new FbParameter("@Code", FbDbType.VarChar);
param.Value = code;
com.Parameters.Add(param);
param = new FbParameter("@FK_CurrencyID", FbDbType.Integer);
param.Value = currencyID;
com.Parameters.Add(param);
param = new FbParameter("@IsPercentage", FbDbType.SmallInt);
param.Value = isPercentage;
com.Parameters.Add(param);
param = new FbParameter("@ID", FbDbType.Integer);
param.Direction = ParameterDirection.Output;
com.Parameters.Add(param);
conn.Open();
object test = com.ExecuteScalar();
id = (int)test;
conn.Close();
conn.Dispose();
com.Dispose();
return id;
}
}
DDL (Courtesy of IBExpert):
/******************************************************************************/
/**** Generated by IBExpert 2005.09.25 14/11/2005 09:00:24 AM ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES NONE;
CREATE DATABASE 'C:\Data\ParameterTest.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET NONE;
/******************************************************************************/
/**** Generators ****/
/******************************************************************************/
CREATE GENERATOR GEN_INDEXT_ID;
SET GENERATOR GEN_INDEXT_ID TO 1;
SET TERM ^ ;
/******************************************************************************/
/**** Stored Procedures ****/
/******************************************************************************/
CREATE PROCEDURE INDEXTINSERT (
FK_CURRENCYID INTEGER,
CODE VARCHAR(15),
NAME VARCHAR(50),
ISPERCENTAGE SMALLINT)
RETURNS (
ID INTEGER)
AS
BEGIN
EXIT;
END^
SET TERM ; ^
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATE TABLE INDEXT (
INDEXTID INTEGER NOT NULL,
FK_CURRENCYID INTEGER NOT NULL,
CODE VARCHAR(15),
NAME VARCHAR(50),
ISPERCENTAGE SMALLINT default 0 NOT NULL
);
/******************************************************************************/
/**** Unique Constraints ****/
/******************************************************************************/
ALTER TABLE INDEXT ADD CONSTRAINT UNQ1_INDEXT UNIQUE (CODE);
ALTER TABLE INDEXT ADD CONSTRAINT UNQ2_INDEXT UNIQUE (NAME);
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE INDEXT ADD CONSTRAINT PK_INDEXT PRIMARY KEY (INDEXTID);
/******************************************************************************/
/**** Triggers ****/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/**** Triggers for tables ****/
/******************************************************************************/
/* Trigger: INDEXT_BI */
CREATE TRIGGER INDEXT_BI FOR INDEXT
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.INDEXTID IS NULL) THEN
NEW.INDEXTID = GEN_ID(GEN_INDEXT_ID,1);
END
^
SET TERM ; ^
/******************************************************************************/
/**** Stored Procedures ****/
/******************************************************************************/
SET TERM ^ ;
ALTER PROCEDURE INDEXTINSERT (
FK_CURRENCYID INTEGER,
CODE VARCHAR(15),
NAME VARCHAR(50),
ISPERCENTAGE SMALLINT)
RETURNS (
ID INTEGER)
AS
BEGIN
ID = GEN_ID(GEN_INDEXT_ID,1);
INSERT INTO INDEXT (INDEXTID, FK_CURRENCYID, CODE, NAME, ISPERCENTAGE)
VALUES (:ID, :FK_CURRENCYID, :CODE, :NAME, :ISPERCENTAGE);
SUSPEND;
END
^
SET TERM ; ^
/******************************************************************************/
/**** Privileges ****/
/******************************************************************************/
/* Privileges of users */
GRANT SELECT ON RDB$ROLES TO PUBLIC;
/* Privileges of procedures */
GRANT INSERT ON INDEXT TO PROCEDURE INDEXTINSERT;