FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Nykomling
|
HEj!
Jag har slitit mitt hår i flera dagar med följande sats och kan inte komma på varför jag får ett felmeddelande vid uppdatering. Feltyp: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC SQL Server Driver]Felaktigt COUNT-fält eller syntaxfel /bilvard/insert.asp, line 10 Scriptet. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <!--#include file="Connections/BILVARD.asp" --> <% set Recordset1 = Server.CreateObject("ADODB.Recordset") Recordset1.ActiveConnection = MM_BILVARD_STRING Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & Request.Querystring("SCHEMA_ID") & " " Recordset1.CursorType = 0 Recordset1.CursorLocation = 2 Recordset1.LockType = 3 Recordset1.Open() Recordset1_numRows = 0 Recordset1("VECKA_ID")=Request.Form("VECKAID") Recordset1("KLAR")=Request.Form("KLAR") Recordset1("KLAR_PERS_ID")=Request.Form("PERSON_ID ") Recordset1.Update Recordset1.Close redir = "default.asp?vecka=" & Request.Querystring("VECKA") Response.Redirect(redir) %> Hoppas någon har nån lösning. /Daniel Blixt, SKövde |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Mycket flitig postare
|
Felet blir ju när du försöker köra ditt query (rad 10). Jag skulle börja så här, steg för steg, för att felsöka:
1) Prova att skriva SQL-satsen utan request.querystring, dvs hårdkoda in ett värde och se om det fungerar då 2) kommentera bort raderna cursortyp, cursorlocation och locktype och se om det fung (default på dessa brukar räcka för ett läs-query) 3) Lägg in en kontroll att connection är uppe (men detta har du säkert redan kollat) Jag skulle TRO att något av dessa kommer att visa felet, men jag vet ju inte vad du redan testat eftersom du bara nämner att du testat i flera dagar... Lycka till... |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Tack för tipsen.. Men jag har tyvärr redan provat dem.
Tilläggas kan också göra att alla andra databasscript på sajten fungerar utmärkt och den använder samma connection fil. Här är en dump på tabellen det gäller. CREATE TABLE [dbo].[VARDSCHEMA] ( [VARDSCHEMA_ID] [int] IDENTITY (1, 1) NOT NULL , [VECKA_ID] [int] NOT NULL , [AR] [int] NOT NULL , [BIL_ID] [int] NOT NULL , [ANSV_ID] [int] NOT NULL , [TYP_ID] [int] NULL , [KLAR] [int] NULL , [KLAR_DATUM] [datetime] NULL , [KLAR_PERS_ID] [int] NULL ) ON [PRIMARY] GO |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Mycket flitig postare
|
Ja, då är det väl bara att backa ännu längre tillbaka... Testa "SELECT * FROM vardschema", kolla att kopplingen verkligen är uppe (det finns ju en property för det, kommer inte ihåg vad den heter) etc...
|
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Nykomling
|
Det är tyvärr inga som helst problem med connection.
Men jag provade ändå att köra en vanlig select sats och det fungerar utmärkt. |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Klarade millennium-buggen
|
Se ALLTID till att validera alla requests innan du trycker in dom i sql satserna. Kör en trim på dom också innan.
Se upp för sql-injects om du kör sådär. Jag skulle med ganska lite kunskaper kunna radera hela din databas om du inte skyddar dig... ![]() Jag brukar testa att skriva ut sql satsen i webläsaren och sedan klistra in den i SQL query analyzer och köra den därifrån. Då är det ganska lätt att utesluta syntaxfel eller datatypsfel iaf. |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Nykomling
|
Kan du förklara det där med VALIDERING lite bättre... Det är inte min starka sida..
/Daniel |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Klarade millennium-buggen
|
Du gör nu så här:
Kod:
Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & Request.Querystring("SCHEMA_ID") Anta att din url är www.xyz.se/sida.asp?VARDSCHEMA_ID=8376453 Om jag skriver in en sql sats, tex "0 or 1=1;DROP TABLE users--&apa=1" så blir det såhär www.xyz.se/sida.asp?VARDSCHEMA_ID=0 or 1=1;DROP TABLE users--&apa=1 Din SQL som du kör nu blir således Kod:
SELECT * FROM vardschema WHERE VARDSCHEMA_ID=0 or 1=1;DROP TABLE users-- Kod:
' or 1=1-- Jaja, nog om detta nu. Validering sa du, japp, typ att du först requestar ett värde och tilldelar en variabel som du sedan kollar så att den är ok, typ Kod:
dim sInput sInput = Request.Querystring("VARDSCHEMA_ID") 'hämta värde sInput = trim(sInput) ' ta bort alla "trailing spaces" som webläsaren/användaren kan ha pillat dit sInput = replace(sInput, "'", ""e;") 'ersätter ' med " Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & sInput |
|||
![]() |
![]() |
Svara |
|
|