eldaria
(20.814 point. Point ude: 0)
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
-----------------
Skrevet lør. d. 15. januar 2005 kl. 22:49:42| #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
Skrevet søn. d. 16. januar 2005 kl. 17:54:57| #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. :-)
Skrevet søn. d. 16. januar 2005 kl. 17:58:09| #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.
Skrevet søn. d. 16. januar 2005 kl. 17:58:19| #4