Avatar billede ihtezaz Praktikant
01. marts 2007 - 17:18 Der er 4 kommentarer

sql Insert med parameter.

Hej Hvordan laver jeg en parametiseret kald til db'en i asp. Er det ligesom asp.net med @parameter.

På forhånd tak.:)
Avatar billede softspot Forsker
01. marts 2007 - 17:53 #1
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO tabel(felt1,felt2) VALUES(?,?)"
cmd(0) = felt1var
cmd(1) = felt2var
set rs = cmd.Execute()
Avatar billede softspot Forsker
01. marts 2007 - 17:55 #2
conn er naturligvis dit åbne connection-objekt og rs er det resultat der kommer ud af din Execute (i dette tilfælde et recordset med en kolonne som indeholder antallet af påvirkede rækker).

Du kan naturligvis også bare kalde cmd.Execute uden at lægge det over i et recordset-objekt...
Avatar billede ihtezaz Praktikant
02. marts 2007 - 10:31 #3
hej, hvis jeg gør dette får jeg følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e51'

Provider cannot derive parameter information and SetParameterInfo has not been
Avatar billede softspot Forsker
02. marts 2007 - 12:10 #4
Hvilken database bruger du og hvordan ser DIN sql ud (de faktiske tabel- og feltnavne)?

Det kan være du skal oprette hver parameter eksplicit inden du tildeler værdier til dem, men jeg sidder og bruger SQL Server til daglig og der har jeg ingen problemer med ovenstående kode. Dog har jeg også sat cmd.CommandType = adCmdText som en del af forberedelsen af Command-objektet.

Jeg har lavet en funktion til at udføre kommandoer med, som ser således ud (og den fungerer som sagt mod en SQL Server for inline sql-sætninger):

function ExecSQLCommand(sql, params, cn)
  dim cmd, idx, param, result
 
  set cmd = Server.CreateObject("ADODB.Command")
  set cmd.ActiveConnection = cn
  cmd.CommandType = adCmdText
  cmd.CommandText = sql
  if isArray(params) then
    idx = 0
    for each param in params
      cmd(idx) = param
      idx = idx + 1
    next
  end if
  set result = cmd.Execute()
  set cmd = nothing
 
  set ExecSQLCommand = result
end function

og den kaldes således:

sql = "INSERT INTO tabel1(felt1, felt2) VALUES(?,?)"
ExecSQLCommand sql, Array(vaerdi1, vaerdi2), conn

Parameter 2 (Array'et) er så de parametre SQL-sætningen skal fødes med I DEN RÆKKEFØLGE SOM PARAMETRENE FOREKOMMER I SQL-SÆTNINGEN! Det sidste er vigtigt, da der benyttes anonyme parametre :)

Det kan godt være du får fejl på linien med CommandType, men så er det fordi du ikke har inkluderet den include-fil som følger med ado, hvor alle konstanter er defineret, eller du ikke har erklæret meta-informationer for ADO i din kode. Du kan enten gøre en af de nævnte, eller benytte den numeriske værdi for adCmdText (som jeg mener er 1).
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