webForumDet fria alternativet

Reda ut begreppen när det gäller att kppla till databas

ASP

14 svar · 411 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Hej,
tyvär blir jag inte riktigt klok på alla olika sätt som finns...
Har hittat åtminstone 3:

  1. Set Databas = Server.CreateObject( "Adodb.connection" )
    Databas.Provider = "Microsoft.Jet.OLEDB.4.0"
    MdbFilePath = Server.MapPath( "/****" )
    Databas.connectionString = "Data Source='" & MdbFilePath & "'"
    Databas.open
    
  2. Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath( "/****" )
    strSQL = "....."
    Set objRS = objConn.Execute(strSQL)
    ‘
    ‘
    ‘
    objRS.Close
        Set objRS = Nothing
        objConn.Close
        Set objConn = Nothing
    
  3. Set gbok = Server.CreateObject( "Adodb.Connection" )
    gbok.Provider = "Microsoft.Jet.OLEDB.4.0"
    MdbFilePath = Server.MapPath( "/****" )
    gbok.ConnectionString = "Data Source='" & MdbFilePath & "'"
    gbok.open
    
    strSQL = "……"
    
    gbok.Execute( strSQL )
    Set gbok = Nothing
    

Vilka fördelar har de olika?
Och vilken rekomenderas och varför?

Medlem sedan dec. 19998 577 inlägg
#2

Alla metoder du beskriver öppnar databasen på samma sätt (samma provider), men med olika metoder och parametrar. Vanligast är att använda 2:an, men dom andra går lika bra.

Medlem sedan nov. 20017 144 inlägg
#3

Men är det inte en viss prestandaskillnad på "execute" och "open"?

Medlem sedan mars 2002823 inlägg
#4

Jesper T skrev:

Men är det inte en viss prestandaskillnad på "execute" och "open"?

Till vilkens fördel?

Medlem sedan dec. 19998 577 inlägg
#5

Jesper T skrev:

Men är det inte en viss prestandaskillnad på "execute" och "open"?

I alla tre fallen används metoden open för att öppna databasen, alternativ två och tre använder sig sedan utav execute för att köra en fråga, det första alternativet kör ingen fråga alls.

Självklart kan du öppna ett recordset med dessa connectionobjekt som argument, men det görs inte här.

Mvh, Vide

Medlem sedan feb. 200112 078 inlägg
#6

Skillnaden med att öppna med Execute och Open är att ett RecordSet som är öppnat med Execute, alltid är ReadOnly. Ett RecordSet som öppnas med Open däremot, kan specifieras på ett annat sätt, med konstanter och andra parametrar som t.ex. disconnected recordsets, editeringsbara recordsets, mm.

Min erfarenhet är att alltid använda Execute, vid hämtning av data och (med ett par undantag) likaså vid radering, editering och addering av data.

Däremot när man vill ha tillgång till metoder såsom recordcount eller liknande, då använder jag Open, likaså i vid t.ex. paging-script, då jag är tvungen att ha ett RecordSet där jag kan hoppa fram och tillbaka.

Medlem sedan mars 2002823 inlägg
#7

OveRRidE skrev:

Däremot när man vill ha tillgång till metoder såsom recordcount eller liknande, då använder jag Open, likaså i vid t.ex. paging-script, då jag är tvungen att ha ett RecordSet där jag kan hoppa fram och tillbaka.

Hur skulle du då omformulera alt 2?

Min erfarenhet är att alltid använda Execute, vid hämtning av data och (med ett par undantag) likaså vid radering, editering och addering av data

Så vid uppdatering, insert och delete i databasen går bra att använda execute, men inte vid paging...

Medlem sedan feb. 200112 078 inlägg
#8

plelkes skrev:

OveRRidE skrev:

Däremot när man vill ha tillgång till metoder såsom recordcount eller liknande, då använder jag Open, likaså i vid t.ex. paging-script, då jag är tvungen att ha ett RecordSet där jag kan hoppa fram och tillbaka.

Hur skulle du då omformulera alt 2?

Det skulle jag inte, det ser bra ut som det är. Om du inte vill använda RecordCount. :)

Min erfarenhet är att alltid använda Execute, vid hämtning av data och (med ett par undantag) likaså vid radering, editering och addering av data

Så vid uppdatering, insert och delete i databasen går bra att använda execute, men inte vid paging...

Du kan inte använda Execute vid paging.

Medlem sedan apr. 20003 174 inlägg
#9

OveRRidE skrev:

Du kan inte använda Execute vid paging.

Nu är kanske detta lite o.t. och o.k., men jo det kan man visst.. det beror på hur man bygger sitt paging-system. :)

ex. Pagingsystem med GetRows använder Execute()-modellen.

Medlem sedan feb. 200112 078 inlägg
#10

Palle skrev:

OveRRidE skrev:

Du kan inte använda Execute vid paging.

Nu är kanske detta lite o.t. och o.k., men jo det kan man visst.. det beror på hur man bygger sitt paging-system. :)

ex. Pagingsystem med GetRows använder Execute()-modellen.

Det är sant, Palle. Helt sant.

Sen vet jag inte hur kul jag tycker att det är att ha paging i arrays, dock. :)

Medlem sedan dec. 19998 577 inlägg
#11

Det blandas ihop att "öppna databas (conncetion)" och "öppna recordset". I frågan handlar det om att öppna databasen (connectionobjekt). Här kan du inte öppna på annat sätt än med open.

Om vi går ifrån ämnet till att öppna ett recordset på olika sätt så är det som OveRRidE säger. :)

Medlem sedan mars 2002823 inlägg
#12

Med risk att låta som den förvirrade nybörjare jag är:

...."öppna databas (conncetion)"

  1. Det gör jag så snart som/ då jag UPPDATE, INSERT, DELETE
  2. Ngra andra tillfällen?
  3. Och då är "mitt" alt. #2 vanligast, men alla 3 år gångbara?

"öppna recordset"

  1. används ffa vid paging?
  2. kan ngn av er på wf ge ett ex på hur det kan se ut när både databasen öppnas och rs öppnas med?
Medlem sedan apr. 20003 174 inlägg
#13

Ett exempel..

[red]<%

Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("databas.mdb")
		Set RecSet = Connect.Execute("SELECT fld1, fld2 FROM tbl1 WHERE fld1 = 'foo' AND fld2 = 'bar' ORDER BY fld1")

			If NOT RecSet.EOF Then
		
				'// Gör någe..

			End If
	
		RecSet.Close
		Set RecSet = Nothing
	Connect.Close
Set Connect = Nothing

%>[/red]
Medlem sedan mars 2002823 inlägg
#14

Ytterligare ngra frågo:

  1. Kan man ha "connection" i en fil för sig? typ: minconn.asp
  2. Finns det ngra nackdelar med denna lösning
  3. vas skulle stå i detta fil?
  4. hur skulle det se ut i min 3 exempel?
Medlem sedan maj 2002560 inlägg
#15

Jag tycker detta är smidigt

	SQL = "select * from table"
	Call SetCon(SQL, True)
	If IsArray(SetCon) Then
		'Do Something
	Else
		'No Records
	End If

Alterenativt denna om vi inte skall plocka ut något ur en databas

	SQL = "insert into table (field) values (value)"
	Call SetCon(SQL, False)

Funktioner

	Function SetCon(SQL, MkRecSet)
		Dim oCon
		Set oCon = Server.CreateObject("ADODB.Connection")
		oCon.Open(Application("ADODB"))
		If MkRecSet = True Then
			Dim oRs
			Set oRs = oCon.Execute(SQL)
			If Not oRs.EOF Then SetCon = oRs.GetRows(): CloseObject(oRs) Else SetCon = "no records..."
		Else
			oCon.Execute(SQL),,128
		End If
		CloseObject(oCon)
	End Function

	Function CloseObject(obj)
		obj.Close
		Set obj = Nothing
	End Function

global.asa

	Sub Application_OnStart
		Application.Lock
		Application("ADODB") = "driver={MySql ODBC 3.51 Driver};server=localhost;database=****;uid=****;pwd=****;option=16387;"
		Application.UnLock
	End Sub
258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)