Avatar billede jesperfjoelner Nybegynder
02. november 2005 - 02:44 Der er 3 kommentarer og
1 løsning

Fejl i stored proc, nok noget med data typer

Jeg har denne SP:
CREATE PROCEDURE AddToCart
@sessionID nvarchar (50),
@billedeID integer,
@farve nvarchar (50),
@varetype nvarchar (50),
@skrifttekst nvarchar (50),
@storrelse nvarchar (50),
@antal numeric,
@pris numeric
AS
INSERT INTO tblBestillingIndhold  (sessionID,billedeID,farve,varetype,skrifttekst,storrelse,antal,pris)
VALUES (@sessionID,@billedeID,@farve,@varetype,@skrifttekst,@storrelse,@antal,@pris)
GO


og denne stump ASP, men får en fejl:
    Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = conn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "AddToCart"
    cmd.Parameters.Append(cmd.CreateParameter("@sessionID", adVarChar, adParamInput,50))
    cmd.Parameters.Append(cmd.CreateParameter("@billedeID", adInteger, adParamInput))
    cmd.Parameters.Append(cmd.CreateParameter("@farve", adVarChar, adParamInput,50))
    cmd.Parameters.Append(cmd.CreateParameter("@varetype", adVarChar, adParamInput,50))
    cmd.Parameters.Append(cmd.CreateParameter("@skrifttekst", adVarChar, adParamInput,50))
    cmd.Parameters.Append(cmd.CreateParameter("@storrelse", adVarChar, adParamInput,50))
    cmd.Parameters.Append(cmd.CreateParameter("@antal", adNumeric, adParamInput))
    cmd.Parameters.Append(cmd.CreateParameter("@pris", adNumeric, adParamInput))
    cmd.Parameters("@sessionID")    =    session.sessionID
    cmd.Parameters("@billedeID")    =    billedeID
    cmd.Parameters("@farve")        =    farve
    cmd.Parameters("@skrifttekst")    =    skrifttekst
    cmd.Parameters("@storrelse")    =    storrelse
    cmd.Parameters("@antal")        =    antal
    cmd.Parameters("@pris")            =    pris
    cmd.Execute    'her fejler den

Jeg får en fejl i sidste linje. Fejlen er:
Microsoft OLE DB Provider for SQL Server (0x80004005)
The precision is invalid.

Jeg har mistanke til noget med datatyperne for variablerne "antal" og "pris".
Hvilke datatype skal jeg bruge til et antal og en pris? Jeg har numeric (precision 9, decimal 2) som datatype for begge, som det er nu.
Kan I se hvad fejlen kan være?
Avatar billede arne_v Ekspert
02. november 2005 - 08:33 #1
prøv:

CREATE PROCEDURE AddToCart
...
@antal numeric(14,2),
@pris numeric(14,2)

og

cmd.Parameters.Append(cmd.CreateParameter("@antal", adNumeric, adParamInput, 14, 2))
cmd.Parameters.Append(cmd.CreateParameter("@pris", adNumeric, adParamInput, 14, 2))
Avatar billede jesperfjoelner Nybegynder
02. november 2005 - 16:18 #2
Jeg får desværre stadig den samme fejl på linjen:
cmd.execute
men det har at gøre med felterne "Antal" og "pris".
Hvis jeg udelader Antal og Pris både fra min SP og fra ASP'en indsættes der korrekt i tabellen.
I tabellen bruger jeg datatypen Numeric med preicision=14 og decimal=2.
Avatar billede martor Nybegynder
02. november 2005 - 20:52 #3
hvilke typer har du til antal og pris i koden?

Jeg synes at kunne huske at have haft et lignende problem. Så vidt jeg kan se, var min løsning at benytte decimal eller float som datatype i stedet for numeric.
Jeg bruger double som type i min kode.
Avatar billede jesperfjoelner Nybegynder
02. november 2005 - 21:09 #4
Hej igen, jeg har lige fundet denne løsning fra et andet forum:
Tak for tipsne. Jeg prøver måske lige med double-typen også
men nedenstående virker.
--------
SQL Server doesn't like numeric or decimal values from ASP pages.

Instead set the value up with a varchar data type and convert it within the stored procedure, for example:

CREATE PROCEDURE sp_WolfNavInsert

@HTMLTitle varchar,
@LinkTitle varchar,
@HeaderTitle varchar,
@HeaderTitleImage varchar,
@MiddleHeaderImage varchar,
@Sequence varchar(20),
@StartDate datetime,
@EndDate datetime

AS

INSERT
tblWolfNav
(HTMLTitle, LinkTitle, HeaderTitle, HeaderTitleImage, MiddleHeaderImage, Sequence, StartDate, EndDate)
VALUES
(@HTMLTitle, @LinkTitle, @HeaderTitle, @HeaderTitleImage, @MiddleHeaderImage, CONVERT(numeric(18,4),@Sequence), @StartDate, @EndDate)

GO

Where 18 is the precision and 4 is the scale (number of decimal places)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester