Hur gör jag för att få ihopp detta till en sql sats ? Nåt sånt här: <b>Det är väldigt fult att deklarera variabler i inklud filer. Att öppna variabler utanför openConn() och <b>Efektivare sql ?
<code>
'Öppnar db
call openConn()
set oRS = server.CreateObject("ADODB.Recordset")
set oRS2 = server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM tbl_User_Cat WHERE clientsID = " & splitSession("clientsID")
oRS.Open strSQL, dbc
Do Until oRS.EOF
strSQL2 = "SELECT * FROM tbl_User WHERE cId = "&oRS("cId")&" AND clientsID = " & splitSession("clientsID")
oRS2.Open strSQL2, dbc
Response.Write "<h2>" & oRS("cHeadline") & "</h2>"
Do Until oRS2.EOF
Response.Write oRS2("uFirstName") &"<br>"
oRS2.MoveNext
loop
oRS2.Close
oRS.MoveNext
Loop
'Stänger db
Call closeConn()
</code>Sv: Efektivare sql ?
'Öppnar db
call openConn()
set oRS = server.CreateObject("ADODB.Recordset")
clientsID = splitSession("clientsID")
strSQL = "SELECT tbl_User_Cat.*" & vbCrLf & _
"FROM tbl_User_Cat LEFT JOIN tbl_User ON tbl_User_Cat.cId = tbl_User.cId" & vbCrLf & _
"WHERE tbl_User_Cat.clientsID = " & clientsID & " AND tbl_User.clientsID = " & clientsID
oRS.Open strSQL, dbc
Do Until oRS.EOF
If LastHeadline <> oRS("cHeadline") Then
Response.Write "<h2>" & oRS("cHeadline") & "</h2>"
LastHeadline = oRS("cHeadline")
End If
Response.Write oRS2("uFirstName") &"<br>"
oRS.MoveNext
Loop
'Stänger db
Call closeConn()
Det är väldigt fult att deklarera variabler i inklud filer. Att öppna variabler utanför openConn() och sedan stänga dem med closeConn() tycker jag är en väldigt ful lösning. Som jag hoppas du slutar med snarast.
Sv:Efektivare sql ?
sedan stänga dem med closeConn() tycker jag är en väldigt ful lösning. Som jag hoppas du slutar med snarast. </b>
Med risk för att jag sticker ut hakan för långt.
Skrev du detta för att provosera, eller är det din uppriktiga uppfatning?
Om det är så, så tycker jag att det är helt upp åt väggarna.
Att via en enda includefil ansluta och avsluta en connection är inte dumt, det är klokt.
Blir det galet någonstans, eller man byter server/webbhotel, då är det på ett enda ställe som man ändra,
inte i varja asp-fil som man har.
Att förenkla sitt handhavande kan aldrig vara fel, det är förutseende.
Jag kan inte se några som helst nackdelar med att ha include-filer på det sättet.Sv: Efektivare sql ?
Med risk för att jag sticker ut hakan för långt.
Skrev du detta för att provosera, eller är det din uppriktiga uppfatning?
</b>
Min erfarenhet, förståelse och kunskap ger mig denna uppfattning.
<b>
Om det är så, så tycker jag att det är helt upp åt väggarna.
</b>
Jag tycker du är för ivrig att avfärda mina synpunkter. Var öppen för folks kritik. Istället för att avfärda den, be dem förklara varför det har en annan synpunkt. Ödmjukhet är en dygd. ;o9
<b>
Att via en enda includefil ansluta och avsluta en connection är inte dumt, det är klokt.
Blir det galet någonstans, eller man byter server/webbhotel, då är det på ett enda ställe som man ändra,
inte i varja asp-fil som man har.
Att föränkla sitt handhavande kan aldrig vara fel, det är förutseende.
</b>
Jag kritiserar inte att man använder en inkludfil för att hantera anslutningar till databasen. Jag tycker att det är et kraftfult verktyg RÄTT använt.
<b>
Jag kan inte se några som helst nackdelar med att ha include-filer på det sättet.
</b>
Att deklarera variabler i andrafiler, att slentreanmässigt öppna och stänga en anslutningen till datbasen på varje sida, anropa externa variabeler från en subrutin. Är tecken på "dålig" programmering.
En bätre implementering kan se ut på följande sätt:
<%
Function OpenConnection()
Dim Conn
Dim ConnectionString
ConnectionString = Application("ConnectionString")
Set Conn = CreateObject("ADODB.Connection")
Conn.Open ConnectionString
Set OpenConnection = Conn
End Function
%>
Den kan sedan implementeras på följande sätt:
<%
Dim cmd
Dim Conn
Dim rs
Dim rsSub
Dim P
Dim strSQL
Const adInteger = 3
Const adParamInput = 1
strSQL = "SELECT * FROM tbl_User_Cat WHERE clientsID = " & splitSession("clientsID")
'Öppnar db
Set Conn = OpenConnection()
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = Conn
cmd.CommandText = "SELECT *" + vbCrLf + _
"FROM tbl_User" + vbCrLf + _
"WHERE cId = @cId AND clientsID = @clientsID"
Set P = cmd.CreateParameter("@clientsID", adInteger, adParamInput, , splitSession("clientsID"))
cmd.Parameters.Append P
Set P = cmd.CreateParameter("@cId", adInteger, adParamInput)
cmd.Parameters.Append P
cmd.Prepared = True
Set rs = Conn.Execute(strSQL)
Do Until rs.EOF
Response.Write "<h2>" & oRS("cHeadline") & "</h2>"
P.value = oRS("cId")
rsSub.Open cmd
Do Until rsSub.EOF
Response.Write rsSub("uFirstName") &"<br>"
rsSub.MoveNext
Loop
rsSub.Close
rs.MoveNext
Loop
rs.Close
'Stänger db
Conn.Close
%>
Fortfarande en inklude fil.
Passa på att demonstrerar hur man kan implementera en parameterfråga. Mycket bra sätt att förhindra SQL inject och göra koden mer databas oberoende.