Avatar billede eldaria Nybegynder
15. januar 2005 - 22:45 Der er 3 kommentarer og
1 løsning

SQL Stored Procedure og ASP kode meget underligt problem.

Jeg har et Virkeligt underligt problem.
Jeg har oprettet nogle ASP sider, der alle bruger en fælles Function til at eksekvere Stored Procedures på en SQL server.
Men, på de fleste sider der virker det, men for en enkelt der virker det ikke, Og jeg kan simpelten ikke finde ud af vad der genererer den fejl besked.
Jeg har inkluderet all kode jeg kan se relevant, Den line som fejl beskeden referer til er den hvor den eksekverer koden til SQL serveren, Jeg har markeret den med --->>>

Jeg er ved at få hovedpine af dette her.
Sig til om du skal bruge noget mere.

Fejl beskeden Finder du i sluttnigen.
Jeg har lagt nogle debug linier ind i koden så i kan se vad det er den prøver at sende til databasen.


FunktionenÆ
-----------------
Function RetSParg(strSP, ReturnRec, Fields(), FieldTypes(), RetVal, Values())
    Dim cmdSP
    Dim I
    Set cmdSP = Server.CreateObject("ADODB.Command")
    With cmdSP
        .ActiveConnection = cn
        .CommandText = strSP
        .CommandType = adCmdStoredProc
        For i = LBound(Values) to UBound(Values)
            Select Case FieldTypes(i)
                Case adVarChar
                    response.write("Field=" & Fields(i) & " - FieldType=" & FieldTypes(i) & " - Length=" & Len(Values(i)) & " - Value=" & Values(i) & "<br/>")
                    .Parameters.Append .CreateParameter(Fields(i), FieldTypes(i), adParamInput, Len(Values(i)), Values(i))
                Case adInteger
                    response.write("Field=" & Fields(i) & " - FieldType=" & FieldTypes(i) & " - Value=" & Values(i) & "<br/>")
                    .Parameters.Append .CreateParameter(Fields(i), FieldTypes(i), adParamInput, , Values(i))
            End Select
        Next
    Select Case ReturnRec
        Case True
--->>>            Set rsRet = .Execute
        Case False
            .Execute , , adExecuteNoRecords
    End Select
    Select Case RetVal
        Case 0
        Case Else
            RetSParg = .Parameters(RetVal).Value
    End Select
    End With
    set ParamId = Nothing
    set cmdSP = Nothing
    set i = nothing
End Function
-----------------


Stored Procedures Der Virker:
-----------------
CREATE PROC spSMS_ListTemplatesByCat
@Catid INT
AS
SELECT SMSTemplateID, SMSTemplateTitle, SMSTemplateText, SMSTemplateCatID
FROM tbl_SMS_Template
WHERE (SMSTemplateCatID = @Catid)
GO

CREATE PROC spSMS_AddCat
@categorytext VARCHAR(16)
AS
INSERT INTO tbl_SMS_Category (SMSCategoryText)
VALUES (@categorytext)
GO
-----------------

Stored Procedure Der ikke virker:
-----------------
CREATE PROC spSMS_AddTemplate
@title VARCHAR(20),
@text VARCHAR(160),
@catID INT
AS
INSERT INTO tbl_SMS_Template (SMSTemplateTitle, SMSTemplateText, SMSTemplateCatID)
VALUES (@title, @text, @catID)
GO
-----------------


Code i ASP Siderne:

Virker:
-----------------
Dim Values
Dim Fields
Dim FieldTypes
Values = Array(Request.Form("txtText"))
Fields = Array("@CategoryText")
FieldTypes = Array(adVarChar)
call RetSParg("spSMS_AddCat", False, Fields, Fieldtypes, 0, Values)
-----------------

Virker også:
-----------------
Dim Values
Dim Fields
Dim FieldTypes
Values = Array(CatID)
Fields = Array("@CatId")
FieldTypes = Array(adInteger)
call RetSParg("spSMS_ListTemplatesByCat", True, Fields, FieldTypes, 0, Values)
Do until rsRet.EOF
-----------------

Virker ikke:
-----------------
Dim Values
Dim Fields
Dim FieldTypes
Values = Array(Request.Form("selCategory"), Request.Form("txtText"), Request.Form("txtTitle"))
Fields = Array("@CatID", "@Text", "@title")
FieldTypes = Array(adInteger, adVarChar, adVarChar)
call RetSParg("spSMS_AddTemplate", False, Fields, Fieldtypes, 0, Values)

-----------------

Resultatet:
-----------------
Field=@CatID - FieldType=3 - Value=8
Field=@Text - FieldType=200 - Length=67 - Value=Testing a Text for a Category, this is a bit longer.
Field=@title - FieldType=200 - Length=16 - Value=Testing Title

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Error converting data type varchar to int.

/Includes/commoninc.asp, line 73
-----------------
Avatar billede arne_v Ekspert
15. januar 2005 - 22:49 #1
Gæt: argument rækkefølgen

Values = Array(Request.Form("selCategory"), Request.Form("txtText"), Request.Form("txtTitle"))
Fields = Array("@CatID", "@Text", "@title")
FieldTypes = Array(adInteger, adVarChar, adVarChar)

versus

CREATE PROC spSMS_AddTemplate
@title VARCHAR(20),
@text VARCHAR(160),
@catID INT
Avatar billede eldaria Nybegynder
16. januar 2005 - 17:54 #2
Ja det virkedem
Underligt at man skal sende parameterene i en specifik orden, Jeg troede nui at det var grunden til at man sender Parameter Navn og Type sammen med værdien, for om man nu aligevel sender den i den riktigt orden så er der jo ikke nogen grund til at sende parameter type og navn med?
Men smid et svar og få dine points. :-)
Avatar billede arne_v Ekspert
16. januar 2005 - 17:58 #3
Jeg tror ikke at navnene i ADODB.Command parameters er er relateret til
navnene i argument listen af SP men kun til hvordan du sætter og henter dem
i applikationen.
Avatar billede arne_v Ekspert
16. januar 2005 - 17:58 #4
svar
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
Kurser inden for grundlæggende programmering

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